import { Component, OnInit } from '@angular/core';
import { CommonModule } from '@angular/common';
import { ActivatedRoute, Router } from '@angular/router';
import { LucideAngularModule, ArrowLeft, Edit3, Sparkles } from 'lucide-angular';
import { NpcService } from '../../../services/npc.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 { Npc } from '../../../services/npc.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 PNJ.
 * Route : /campaigns/:campaignId/npcs/:npcId
 */
@Component({
  selector: 'app-npc-view',
  standalone: true,
  imports: [CommonModule, LucideAngularModule, PersonaViewComponent, AiChatDrawerComponent],
  templateUrl: './npc-view.component.html',
  styleUrls: ['./npc-view.component.scss']
})
export class NpcViewComponent implements OnInit {
  readonly ArrowLeft = ArrowLeft;
  readonly Edit3 = Edit3;
  readonly Sparkles = Sparkles;

  campaignId: string | null = null;
  npcId: string | null = null;

  npc: Npc | null = null;
  templateFields: TemplateField[] = [];

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

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

  ngOnInit(): void {
    const params = this.route.snapshot.paramMap;
    this.campaignId = params.get('campaignId');
    this.npcId = params.get('npcId');
    if (this.npcId) {
      this.service.getById(this.npcId).subscribe({
        next: n => { this.npc = n; },
        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.npcTemplate ?? [];
          });
        }
      });
    }
  }

  edit(): void {
    if (this.campaignId && this.npcId) {
      this.router.navigate(['/campaigns', this.campaignId, 'npcs', this.npcId, 'edit']);
    }
  }

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