import { Component, OnInit } from '@angular/core';

import { ActivatedRoute, Router } from '@angular/router';
import { LucideAngularModule, ArrowLeft, Edit3, Sparkles } from 'lucide-angular';
import { CharacterService } from '../../../services/character.service';
import { CampaignService } from '../../../services/campaign.service';
import { GameSystemService } from '../../../services/game-system.service';
import { CampaignSidebarService } from '../../../services/campaign-sidebar.service';
import { TemplateField } from '../../../services/template.model';
import { Character } from '../../../services/character.model';
import { PersonaViewComponent } from '../../../shared/persona-view/persona-view.component';
import { AiChatDrawerComponent } from '../../../shared/ai-chat-drawer/ai-chat-drawer.component';

/**
 * Vue lecture seule "WorldAnvil" d'une fiche PJ.
 * Route : /campaigns/:campaignId/playthroughs/:playthroughId/characters/:characterId
 */
@Component({
    selector: 'app-character-view',
    imports: [LucideAngularModule, PersonaViewComponent, AiChatDrawerComponent],
    templateUrl: './character-view.component.html',
    styleUrls: ['./character-view.component.scss']
})
export class CharacterViewComponent implements OnInit {
  readonly ArrowLeft = ArrowLeft;
  readonly Edit3 = Edit3;
  readonly Sparkles = Sparkles;

  campaignId: string | null = null;
  playthroughId: string | null = null;
  characterId: string | null = null;

  character: Character | null = null;
  templateFields: TemplateField[] = [];

  chatOpen = false;
  toggleChat(): void { this.chatOpen = !this.chatOpen; }

  constructor(
    private route: ActivatedRoute,
    private router: Router,
    private service: CharacterService,
    private campaignService: CampaignService,
    private gameSystemService: GameSystemService,
    private campaignSidebar: CampaignSidebarService
  ) {}

  ngOnInit(): void {
    const params = this.route.snapshot.paramMap;
    this.campaignId = params.get('campaignId');
    this.playthroughId = params.get('playthroughId');
    this.characterId = params.get('characterId');
    if (this.characterId) {
      this.service.getById(this.characterId).subscribe({
        next: c => { this.character = c; },
        error: () => this.back()
      });
    }
    if (this.campaignId) {
      this.campaignSidebar.show(this.campaignId);
      this.campaignService.getCampaignById(this.campaignId).subscribe(camp => {
        if (camp.gameSystemId) {
          this.gameSystemService.getById(camp.gameSystemId).subscribe(gs => {
            this.templateFields = gs.characterTemplate ?? [];
          });
        }
      });
    }
  }

  edit(): void {
    if (this.campaignId && this.playthroughId && this.characterId) {
      this.router.navigate(['/campaigns', this.campaignId, 'playthroughs', this.playthroughId, 'characters', this.characterId, 'edit']);
    }
  }

  back(): void {
    if (this.campaignId && this.playthroughId) {
      this.router.navigate(['/campaigns', this.campaignId, 'playthroughs', this.playthroughId]);
    } else if (this.campaignId) {
      this.router.navigate(['/campaigns', this.campaignId]);
    } else {
      this.router.navigate(['/campaigns']);
    }
  }
}
