import { Component, Input, Output, EventEmitter, HostListener, ChangeDetectorRef, SimpleChanges } from '@angular/core';
import { CommonModule } from '@angular/common';
import { BulkAction } from '../../interfaces/bulk-action.interface';

@Component({
  selector: 'app-bulk-actions',
  standalone: true,
  imports: [CommonModule],
  templateUrl: './bulk-actions.component.html',
  styleUrls: ['./bulk-actions.component.scss']
})
export class BulkActionsComponent {
  @Input() actions: BulkAction[] = [];
  @Input() selectedItems: any[] = [];
  @Input() visible: boolean = false;
  
  @Output() close = new EventEmitter<void>();
  @Output() executeAction = new EventEmitter<{ action: BulkAction; items: any[] }>();

  // Navegação interna para sub-ações
  currentActions: BulkAction[] = [];
  breadcrumbs: BulkAction[] = [];

  constructor() {}

  ngOnChanges(changes: SimpleChanges) {
    if (changes['visible'] && changes['visible'].currentValue === true) {
      this.currentActions = [...this.actions];
      this.breadcrumbs = [];
    }
  }

  selectAction(action: BulkAction): void {
    if (action.subActions && action.subActions.length > 0) {
      this.breadcrumbs.push(action);
      this.currentActions = [...action.subActions];
    } else {
      this.executeAction.emit({ action, items: this.selectedItems });
      this.closeModal();
    }
  }

  /**
   * ✨ NOVO: Verifica se a ação está disponível baseado na seleção
   */
  isActionAvailable(action: BulkAction): boolean {
    // Se a ação tem função show customizada, usar ela
    if (action.show) {
      return action.show(this.selectedItems);
    }
    
    // Se requiresSelection é false, sempre disponível
    if (action.requiresSelection === false) {
      return true;
    }
    
    // Por padrão, requer seleção (requiresSelection é true ou undefined)
    return this.selectedItems.length > 0;
  }

  /**
   * ✨ NOVO: Verifica se a ação está desabilitada
   */
  isActionDisabled(action: BulkAction): boolean {
    return !this.isActionAvailable(action);
  }

  /**
   * ✨ NOVO: Retorna ações disponíveis (sempre visíveis, mas podem estar desabilitadas)
   */
  get availableActions(): BulkAction[] {
    return this.currentActions; // Sempre mostrar todas as ações
  }

  goBack(): void {
    if (this.breadcrumbs.length > 0) {
      this.breadcrumbs.pop();
      if (this.breadcrumbs.length > 0) {
        this.currentActions = [...(this.breadcrumbs[this.breadcrumbs.length - 1].subActions || [])];
      } else {
        this.currentActions = [...this.actions];
      }
    }
  }

  closeModal(): void {
    this.close.emit();
  }

  // Fecha o modal ao pressionar a tecla Escape
  @HostListener('document:keydown.escape', ['$event'])
  onEscapeKey(event: KeyboardEvent) {
    if (this.visible) {
      this.closeModal();
    }
  }
} 