/**
 * Interface para o sistema de abas de edição
 * Seguindo padrões MCP - Shared Domain
 */

export interface TabItem {
  id?: string | number;
  title: string;
  type: string; // Permitindo tipos genéricos de entidades
  data: any;
  isModified?: boolean;
  isLoading?: boolean;
  // Novas propriedades para suporte a componentes customizados
  customComponent?: string; // Nome do componente customizado (ex: 'address-form')
  componentConfig?: any; // Configuração específica do componente
  parentId?: string | number; // ID do item pai (ex: driver ID para aba de endereço)
}

export interface TabSystemConfig {
  maxTabs: number;
  allowDuplicates: boolean;
  autoSave?: boolean;
  confirmClose?: boolean;
  autoSelectOnAdd?: boolean; // Nova propriedade para seleção automática
}

export interface TabSystemState {
  tabs: TabItem[];
  selectedTabIndex: number;
  maxTabs: number;
  isLoading: boolean;
}

/**
 * Interface para ações do sistema de abas
 */
export interface TabSystemActions {
  addTab(item: TabItem): Promise<boolean>;
  removeTab(index: number): Promise<boolean>;
  selectTab(index: number): void;
  updateTab(index: number, data: any): void;
  closeAllTabs(): Promise<boolean>;
  hasUnsavedChanges(): boolean;
}

/**
 * Interface para eventos do sistema de abas
 */
export interface TabSystemEvents {
  onTabAdded?: (tab: TabItem, index: number) => void;
  onTabRemoved?: (tab: TabItem, index: number) => void;
  onTabSelected?: (tab: TabItem, index: number) => void;
  onTabUpdated?: (tab: TabItem, index: number) => void;
  onMaxTabsReached?: () => void;
  onUnsavedChanges?: (tabs: TabItem[]) => void;
}

/**
 * Interface para resultado de operações
 */
export interface TabOperationResult {
  success: boolean;
  message?: string;
  tabIndex?: number;
  tab?: TabItem;
} 