/**
 * 🎯 FinesListComponent Interfaces
 * 
 * Interfaces para o componente reutilizável de lista de multas
 */

import { Fines } from '../../fines.interface';

/**
 * Configuração do componente FinesListComponent
 */
export interface FinesListConfig {
  /** ID do veículo para filtrar multas específicas */
  vehicleId?: number;
  
  /** ID do motorista para filtrar multas específicas */
  driverId?: number;
  
  /** Mostrar botão "Nova Multa" */
  showNewButton?: boolean;
  
  /** Modo somente leitura (sem ações) */
  readonly?: boolean;
  
  /** Altura máxima do componente */
  maxHeight?: string;
  
  /** Mostrar filtros de organização (abas) */
  showFilters?: boolean;
  
  /** Título personalizado do componente */
  title?: string;
  
  /** Número de itens por página */
  pageSize?: number;
}

/**
 * Multas organizadas por tipo de organização
 */
export interface FinesByOrganization {
  municipal: Fines[];
  state: Fines[];
  federal: Fines[];
}

/**
 * Tipos de organização para filtros
 */
export type OrganizationType = 'municipal' | 'state' | 'federal';

/**
 * Configuração das abas de filtro
 */
export interface FilterTab {
  id: OrganizationType;
  label: string;
  count: number;
  active: boolean;
}

/**
 * Estado do componente
 */
export interface FinesListState {
  loading: boolean;
  error: string | null;
  fines: Fines[];
  filteredFines: Fines[];
  activeFilter: OrganizationType;
  totalCount: number;
  currentPage: number;
}

/**
 * Eventos emitidos pelo componente
 */
export interface FinesListEvents {
  /** Evento quando uma multa é selecionada para detalhes */
  onFineSelected: (fine: Fines) => void;
  
  /** Evento quando o botão "Nova Multa" é clicado */
  onNewFine: (context?: { vehicleId?: number; driverId?: number }) => void;
  
  /** Evento quando o filtro é alterado */
  onFilterChanged: (filter: OrganizationType) => void;
}

/**
 * Mapeamento de organizações para tipos
 */
export const ORGANIZATION_TYPE_MAP: Record<string, OrganizationType> = {
  'municipality': 'municipal',
  'state': 'state', 
  'federal': 'federal',
  'company': 'municipal', // Empresas são tratadas como municipais
  'other': 'municipal'    // Outros são tratados como municipais
};

/**
 * Labels das abas de filtro
 */
export const FILTER_TAB_LABELS: Record<OrganizationType, string> = {
  'municipal': 'Municipais',
  'state': 'Estaduais', 
  'federal': 'Federais'
};
