import { Component, ChangeDetectorRef } from "@angular/core";
import { CommonModule, DatePipe, CurrencyPipe } from "@angular/common";
import { MatDialog } from '@angular/material/dialog';

import { TitleService } from "../../shared/services/theme/title.service";
import { HeaderActionsService } from "../../shared/services/header-actions.service";
import { VehiclesService } from "./vehicles.service";
import { Vehicle } from "./vehicle.interface";
import { DriversService } from "../drivers/drivers.service";
import { CompanyService } from "../company/company.service";
import { PersonService } from "../../shared/services/person.service";
import { TabSystemComponent } from "../../shared/components/tab-system/tab-system.component";
import { BaseDomainComponent, DomainConfig } from "../../shared/components/base-domain/base-domain.component";
import { TabFormConfig } from "../../shared/interfaces/generic-tab-form.interface";
import { TabFormConfigService } from "../../shared/components/tab-system/services/tab-form-config.service";
import { ConfirmationService } from '../../shared/services/confirmation/confirmation.service';
import { IntegrationService } from "../integration/services/integration.service";
import { SnackNotifyService } from "../../shared/components/snack-notify/snack-notify.service";
import { VehicleCreateModalComponent } from "./components/vehicle-create-modal/vehicle-create-modal.component";
import { VehicleStatusModalComponent } from "./components/vehicle-status-modal/vehicle-status-modal.component";


/**
 * 🎯 VehiclesComponent - Gestão de Veículos com Padrão Escalável ERP
 * 
 * Baseado no template perfeito do DriversComponent.
 * 
 * ✨ Implementa BaseDomainComponent + Registry Pattern
 * 
 * 🚀 Auto-registro de configurações para escalabilidade infinita!
 */
@Component({
  selector: 'app-vehicles',
  standalone: true,
  imports: [CommonModule, TabSystemComponent],
  providers: [DatePipe, CurrencyPipe],
  templateUrl: './vehicles.component.html',
  styleUrl: './vehicles.component.scss'
})
export class VehiclesComponent extends BaseDomainComponent<Vehicle> {
  cds: any;
  
  constructor(
    private vehiclesService: VehiclesService, // ✅ Injeção direta do service
    titleService: TitleService,
    headerActionsService: HeaderActionsService,
    cdr: ChangeDetectorRef,
    private datePipe: DatePipe,
    private currencyPipe: CurrencyPipe,
    private tabFormConfigService: TabFormConfigService,
    private confirmationService: ConfirmationService,
    private integrationService: IntegrationService,
    private snackNotifyService: SnackNotifyService,
    private driversService: DriversService, // ✅ Injeção do DriversService para remote-select
    private companyService: CompanyService, // ✅ Injeção do CompanyService para remote-select
    private personService: PersonService, // ✅ Injeção do PersonService para remote-select
    private dialog: MatDialog // ✅ Injeção do MatDialog para o modal
  ) {
    // ✅ ARQUITETURA: VehiclesService passado diretamente
    super(titleService, headerActionsService, cdr, vehiclesService);
    // 🚀 REGISTRAR configuração específica de vehicles
    this.registerFormConfig();
  }
 
  /**
   * 🎯 Registra a configuração de formulário específica para vehicles
   * Chamado no construtor para garantir que está disponível
   */
  private async registerFormConfig(): Promise<void> {  
    this.tabFormConfigService.registerFormConfig('vehicle', () => this.getFormConfig());    
  }

  // ========================================
  // 🎯 CONFIGURAÇÃO DO DOMÍNIO VEHICLES
  // ========================================
  // 'insurance', 'maintenance', 
  protected override getDomainConfig(): DomainConfig {
    return {
      domain: 'vehicle', 
      title: 'Veículos',
      entityName: 'veículo',
      pageSize: 300,
      filterConfig: { 
        fieldsSearchDefault: ['license_plate'],
        dateRangeFilter: false,
        companyFilter: true,
        searchConfig: {
          minSearchLength: 4,           // ✨ Só pesquisar após 4 caracteres
          debounceTime: 400,           // ✨ Aguardar 500ms após parar de digitar
          preserveSearchOnDataChange: true  // ✨ Não apagar o campo quando dados chegam
        }
      },
      subTabs: ['dados', 'location', 'photo','logs','financial', 'tollparking', 'abastecimento', 'fines','devicetracker','options'],
      columns: [
        {
          field: "license_plate", 
          header: "Placa", 
          sortable: true, 
          filterable: true, 
          search: true, 
          searchType: "text",
          footer: {
            type: 'count',
            format: 'default',
            label: 'Total de Veículos:',
            precision: 0
          }
        },
        {
          field: "status",
          header: "Status",
          sortable: true,
          filterable: true,
          allowHtml: true,
          search: true,
          searchType: "select",
          searchOptions: [
            { value: 'available', label: 'Disponível' },
            { value: 'in_use', label: 'Em uso' },
            { value: 'under_maintenance', label: 'Em Manutenção' },
            // { value: 'out_of_service', label: 'Fora de serviço' },
            { value: 'broken', label: 'Quebrado' },
            { value: 'sold', label: 'Vendido' },
            { value: 'for_sale', label: 'À venda' },
            { value: 'inactive', label: 'Inativo' },
            { value: 'active', label: 'Ativo' },
            { value: 'training', label: 'Em treinamento' },
            { value: 'under_review', label: 'Em revisão' },
            { value: 'rented', label: 'Alugado' },
            { value: 'stolen', label: 'Roubado' },
            { value: 'crashed', label: 'Sinistrado' },
            { value: 'scraped', label: 'Sucateado' },
            { value: 'reserved', label: 'Reservado' },
            { value: 'in_auction', label: 'Em leilão' },
            // { value: 'under_repair', label: 'Em reparo' },   
          ],
          label: (value: any) => {
            if (!value) return '<span class="status-badge status-unknown">Não informado</span>';
            
            const statusConfig: { [key: string]: { label: string, class: string } } = {
              'available': { label: 'Disponível', class: 'status-available' },
              'in_use': { label: 'Em uso', class: 'status-in-use' },
              'under_maintenance': { label: 'Em Manutenção', class: 'status-under-maintenance' },
              // 'maintenance': { label: 'Em Manutenção', class: 'status-under-maintenance' },
              // 'out_of_service': { label: 'Fora de serviço', class: 'status-out-of-service' },
              // 'broken': { label: 'Quebrado', class: 'status-broken' },
              'sold': { label: 'Vendido', class: 'status-sold' },
              'for_sale': { label: 'Em venda', class: 'status-for-sale' },
              'inactive': { label: 'Inativo', class: 'status-inactive' },
              'active': { label: 'Ativo', class: 'status-active' },
              'training': { label: 'Em treinamento', class: 'status-training' },
              'under_review': { label: 'Em revisão', class: 'status-under-review' }, 
              'rented': { label: 'Alugado', class: 'status-rented' },
              'stolen': { label: 'Roubado', class: 'status-stolen' },
              'crashed': { label: 'Sinistrado', class: 'status-crashed' },
              'scraped': { label: 'Sucateado', class: 'status-scraped' },
              'reserved': { label: 'Reservado', class: 'status-reserved' },
              'in_auction': { label: 'Em leilão', class: 'status-in-auction' },
              'under_repair': { label: 'Em reparo', class: 'status-under-repair' },
            };    
             
            
            const config = statusConfig[value.toLowerCase()] || { label: value, class: 'status-unknown' };
            return `<span class="status-badge ${config.class}">${config.label}</span>`;
          }
        }, 
        {
          field: "fuel",
          header: "Combustível",
          sortable: true,
          filterable: true,
          search: true,
          searchType: "select",
          searchOptions: [
            { value: 'Gasoline', label: 'Gasolina' },
            { value: 'Ethanol', label: 'Etanol' },
            { value: 'Diesel', label: 'Diesel' },
            { value: 'Flex', label: 'Flex' },
            { value: 'Electric', label: 'Elétrico' },
            { value: 'Hybrid', label: 'Híbrido' },
            { value: 'Hydrogen', label: 'Hidrogênio' },
            { value: 'NaturalGas', label: 'Gás Natural' },
            { value: 'Propane', label: 'Propano' },
            { value: 'BioDiesel', label: 'Bio Diesel' },
            { value: 'FlexFuel', label: 'Flex Fuel' },
            { value: 'FlexElectric', label: 'Flex Elétrico' },
            { value: 'FlexGNV', label: 'FlexGNV' },
            { value: 'GasolineElectric', label: 'Gasolina Elétrica' },
            { value: 'GNV', label: 'GNV' }
          ],
          label: (value: any) => {
            if (!value) return '-';
            
            const fuelLabels: { [key: string]: string } = {
              'Gasoline': 'Gasolina',
              'Ethanol': 'Etanol',
              'Diesel': 'Diesel',
              'Flex': 'Flex',
              'Electric': 'Elétrico',
              'Hybrid': 'Híbrido',
              'Hydrogen': 'Hidrogênio',
              'NaturalGas': 'Gás Natural',
              'Propane': 'Propano',
              'BioDiesel': 'Bio Diesel',
              'FlexFuel': 'Flex Fuel',
              'FlexElectric': 'Flex Elétrico',
              'FlexGNV': 'FlexGNV',
              'GasolineElectric': 'Gasolina Elétrica',
              'GNV': 'GNV',            
            };
            
            return fuelLabels[value] || value;
          }
        },                
        { 
          field: "type", 
          header: "Tipo", 
          sortable: true, 
          filterable: true,
          search: true,
          searchType: "select",
          // [ Car, Truck, Motorcycle, Van, Bus, Trailer, PickupTruck, TruckTrailer, Other ]
          searchOptions: [
            { value: 'CAR', label: 'Carro' },
            { value: 'PICKUP_TRUCK', label: 'Caminhonete' },
            { value: 'TRUCK', label: 'Caminhão' },
            { value: 'TRUCK_TRAILER', label: 'Caminhão com Carreta' },
            { value: 'MOTORCYCLE', label: 'Motocicleta' },
            { value: 'VAN', label: 'Van' },
            { value: 'BUS', label: 'Ônibus' },
            { value: 'TRAILER', label: 'Carreta' },
            { value: 'SEMI_TRUCK', label: 'Semi-Reboque' },      
            { value: 'MINIBUS', label: 'Micro Ônibus' },
            { value: 'MOTOR_SCOOTER', label: 'Motoneta' },
            { value: 'MOPED', label: 'Ciclomotor' },
            { value: 'TRICYCLE', label: 'Triciclo' },
            { value: 'UNIDENTIFIED', label: 'Não identificado' },
            { value: 'UTILITY', label: 'Utilitário' },
            { value: 'OTHER', label: 'Outro' },
            
          ],
          label: (value: any) => {
            if (!value) return '-';
            
            const typeLabels: { [key: string]: string } = {
              'CAR': 'Carro',              
              'PICKUPTRUCK': 'Caminhonete',
              'TRUCK': 'Caminhão', 
              'TRUCK_TRAILER': 'Caminhão com Carreta',
              'MOTORCYCLE': 'Motocicleta',
              'VAN': 'Van',
              'BUS': 'Ônibus',
              'TRAILER': 'Carreta',
              'SEMI_TRUCK': 'Semi-Reboque',
              'MINIBUS': 'Micro Ônibus',
              'MOTOR_SCOOTER': 'Motoneta',
              'MOPED': 'Ciclomotor',
              'TRICYCLE': 'Triciclo',
              'UNIDENTIFIED': 'Não identificado',
              'UTILITY': 'Utilitário',
              'OTHER': 'Outro'

            };
            
            return typeLabels[value] || value;
          }
        },
        { field: "brand", header: "Marca", sortable: true, filterable: true, search: false, searchType: "text" },
        { field: "model", header: "Modelo",         
          sortable: true, 
          filterable: true, 
          search: true, 
          searchType: "text" 
        },
        { field: "model_year", 
          header: "Ano", 
          sortable: true, 
          filterable: true, 
          search: false, 
          searchType: "number",
          footer: {
            type: 'avg',
            format: 'default',
            label: 'Média:',
            precision: 0
          } },
        { field: "registered_at_city", 
          header: "Cidade", 
          sortable: true, 
          filterable: true, 
          search: false, 
          searchType: "text" 
        },
        { field: "registered_at_uf", 
          header: "UF", 
          sortable: true, 
          filterable: true, 
          search: false, 
          searchType: "select", 
          searchOptions: [
            { value: "AC", label: "Acre" },
            { value: "AL", label: "Alagoas" },
            { value: "AP", label: "Amapá" },
            { value: "AM", label: "Amazonas" },
            { value: "BA", label: "Bahia" },
            { value: "CE", label: "Ceará" },
            { value: "DF", label: "Distrito Federal" },
            { value: "ES", label: "Espírito Santo" },
            { value: "GO", label: "Goiás" },
            { value: "MA", label: "Maranhão" },
            { value: "MT", label: "Mato Grosso" },
            { value: "MS", label: "Mato Grosso do Sul" },
            { value: "MG", label: "Minas Gerais" },
            { value: "PA", label: "Pará" },
            { value: "PB", label: "Paraíba" },
            { value: "PR", label: "Paraná" },
            { value: "PE", label: "Pernambuco" },
            { value: "PI", label: "Piauí" },
            { value: "RJ", label: "Rio de Janeiro" },
            { value: "RN", label: "Rio Grande do Norte" },
            { value: "RS", label: "Rio Grande do Sul" },
            { value: "RO", label: "Rondônia" },
            { value: "RR", label: "Roraima" },
            { value: "SC", label: "Santa Catarina" },
            { value: "SP", label: "São Paulo" },
            { value: "SE", label: "Sergipe" },
            { value: "TO", label: "Tocantins" }
          ]
        },
        { 
          field: "color", 
          header: "Cor", 
          sortable: true, 
          filterable: true,
          search: false,
          searchType: "text",
          allowHtml: true,
          label: (value: any) => {
            if (!value) return '-';
            
            // Extrair nome e código da cor
            const colorName = value.name || value;
            let colorCode = value.code || null;
            
            // 🎯 CORREÇÃO: Se não tem code, tentar encontrar baseado no nome
            if (!colorCode && colorName) {
              const colorMap: { [key: string]: string } = {
                'BRANCA': '#ffffff', 
                'PRATA': '#c0c0c0', 
                'CINZA': '#808080',
                'PRETO': '#000000',
                'PRETA': '#000000',
                'AZUL': '#0000ff', 
                'VERMELHO': '#ff0000',
                'VERMELHA': '#ff0000',
                'VERDE': '#008000',
                'AMARELO': '#ffff00',
                'MARROM': '#a52a2a',
                'BEGE': '#f5f5dc',
                'DOURADO': '#ffd700',
                'ROXO': '#800080', 
                'LARANJA': '#ffa500',
                'ROSA': '#ffc0cb',
              };
              
              colorCode = colorMap[colorName] || null;
            }
            
            // Se tiver código de cor válido, mostrar sinalização visual
            if (colorCode && colorCode !== '' && colorCode.startsWith('#')) {
              return `<span style="display: inline-flex; align-items: center; gap: 6px;">
                        <span style="display: inline-block; width: 12px; height: 12px; 
                                     border-radius: 50%; background-color: ${colorCode}; 
                                     border: 1px solid #ddd; box-shadow: 0 1px 3px rgba(0,0,0,0.1);"></span>
                        <span>${colorName}</span>
                      </span>`;
            }
            
            // Se não tiver código, mostrar apenas o nome
            return colorName;
          }
        },
       
       
        { 
          field: "last_odometer", 
          header: "Quilometragem", 
          sortable: true, 
          filterable: true,
          label: (value: any) => {
            if (!value) return '-';
            return `${Number(Math.trunc(value/1000)).toLocaleString('pt-BR')} km`;
          },
          footer: {
            type: 'avg',
            format: 'number',
            label: 'Média:',
            precision: 0
          }
        },
        {
            field: 'vin',
            header: 'VIN/Chassi',
            sortable: true,
            filterable: true,
            label: (value: any) => {
                if (!value) return '-';
                return value;
            }
        },
        {
          field: "paymentInstallmentsOpen",
          header: "Financiamento Aberto",
          search: true,
          searchType: "select",
          searchOptions: [
            { value: true, label: 'Sim' },
            { value: false, label: 'Não' }
          ],
          sortable: true,
          filterable: true,
          label: (value: any) => {
            if (!value) return '-';
            return value ? 'Sim' : 'Não';
          }
        },
        {
          field: "driver_name",
          header: "Motorista Atual",
          sortable: true,
          filterable: true,
          label: (value: any, row: any) => {
            if (!value) return 'Não atribuído';
            if (row?.driver?.name) {
              return row.driver.name;
            }
            return `${value}`;
          }
        },
        {
          field: "alienation_person_name",
          header: "Financiador",
          sortable: true,
          filterable: true,
          allowHtml: true,
          search: true,
          searchType: "text",          
          label: (value: any, row: any) => {
            if (!value) return 'Não atribuído';
            if (row?.alienation_person_name) {
              return row.alienation_person_name;
            }
            return `${value}`;
          }
        },
        {
          field: "alienation_payment_installment_total",
          header: "Valor Financiado",
          sortable: true,
          filterable: true,
          label: (value: any) => {
            if (!value) return '-';
            return `R$ ${Number(value).toLocaleString('pt-BR', { minimumFractionDigits: 2 })}`;
          }
        },        
        {
          field: "alienation_payment_installment",
          header: "Qtde de Parcelas",
          sortable: true,
          filterable: true,
          label: (value: any) => {
            if (!value) return '-';
            return value;
          }
        },
        {
          field: "alienation_payment_installment_payment",
          header: "Qtd Parcelas Pagas",
          sortable: true,
          filterable: true,
          label: (value: any) => {
            if (!value) return '-';
            return value;
          }
        },        
        {
          field: "alienation_payment_method",
          header: "Método de Pagamento",
          sortable: true,
          filterable: true,
          label: (value: any) => {
            if (!value) return '-';
            return value;
          }
        },
        {
          field: "alienation_payment_installment_value",
          header: "Valor da Parcela",
          sortable: true,
          filterable: true,
          label: (value: any) => {
            if (!value) return '-';
            return `R$ ${Number(value).toLocaleString('pt-BR', { minimumFractionDigits: 2 })}`;
          }
        },
        {
          field: "owner_person_name",
          header: "Proprietário",
          allowHtml: true,
          search: true,
          searchType: "text",
          sortable: true,
          filterable: true,
          label: (value: any, row: any) => {
            if (!value) return 'Não atribuído';            
            return value;            
          }
        },       
        {
          field: "fleetType",
          header: "Tipo de Frota",
          sortable: true,
          filterable: true, 
          search: false,
          searchType: "select",
          allowHtml: true,
          searchOptions: [
            { value: 'RENTAL', label: 'Rentals' },
            { value: 'CORPORATE', label: 'Corporativo' },
            { value: 'AGGREGATE', label: 'Agregado' },
            { value: 'FIXED_RENTAL', label: 'Frota Fixa - Locação' },
            { value: 'FIXED_DAILY', label: 'Frota Fixa - Diarista' },
            { value: 'OTHER', label: 'Outro' }
          ],
          label: (value: any) => {
            if (!value) return '<span class="status-badge status-unknown">Não informado</span>';
            
            const statusConfig: { [key: string]: { label: string, class: string } } = {
              'rental': { label: 'Rentals', class: 'status-rental' },
              'corporate': { label: 'Corporativo', class: 'status-corporate' },
              'aggregate': { label: 'Agregado', class: 'status-aggregate' },
              'fixed_rental': { label: 'Frota Fixa - Locação', class: 'status-fixed-rental' },
              'fixed_daily': { label: 'Frota Fixa - Diarista', class: 'status-fixed-daily' },
              'other': { label: 'Outro', class: 'status-other' }             
            };                             
            const config = statusConfig[value.toLowerCase()] || { label: value, class: 'status-unknown' };
            return `<span class="status-badge ${config.class}">${config.label}</span>`;
          }
        },

        // {
        //   field: "location_person_name",
        //   header: "Local de Alocação",
        //   sortable: true,
        //   filterable: true, 
        //   search: true,          
        //   searchType: "remote-select",
        //   searchField: "locationIds", // ✅ Campo para filtrar na API
        //   remoteConfig: { // ✅ NOVO: Configuração para remote-select
        //     label: '', // ✅ Label personalizado para o filtro
        //     service: this.personService,
        //     searchField: 'name',
        //     displayField: 'name',
        //     valueField: 'id',
        //     labelField: 'location_person_name',
        //     modalTitle: 'Selecione os locais de alocação',
        //     placeholder: 'Digite o nome do local de alocação...',
        //     multiple: true, // ✅ SEMPRE múltiplo para filtros
        //     maxResults: 50 // ✅ Mais resultados para filtros
        //   },
        //   label: (value: any, row: any) => {
        //     if (!value) return 'Não atribuído';            
        //     return value;
        //   }
        // },
        {
          field: "location_person_name",
          header: "Local de Alocação",
          sortable: true,
          filterable: true,
          label: (value: any) => {
          if (!value) return 'Não atribuído';            
            return value;
          }
        },
        {
          field: "company_name",
          header: "Empresa",
          sortable: true,
          filterable: true,
          label: (value: any) => {
          if (!value) return 'Não atribuído';            
            return value;
          }
        },
        {
          field: "insurance_due_date",
          header: "Venc. Seguro",
          sortable: true,
          filterable: true,
          search: false,
          searchType: "date",
          label: (date: any) => this.datePipe.transform(date, "dd/MM/yyyy") || "-"
        },
        {
          field: "license_due_date",
          header: "Venc. Licenciamento",
          sortable: true,
          filterable: true,
          search: false,
          searchType: "date",
          label: (date: any) => this.datePipe.transform(date, "dd/MM/yyyy") || "-"
        },
        {
          field: "createdAt",
          header: "Criado em",
          sortable: true,
          filterable: true,
          search: false ,
          searchType: "date",
          label: (date: any) => this.datePipe.transform(date, "dd/MM/yyyy HH:mm") || "-"
        },
        {
          field: "price",
          header: "Preço",
          sortable: true,
          filterable: true,
          search: false,
          searchType: "number",
          label: (value: any) => {
            if (!value) return '-';
            return `R$ ${Number(value).toLocaleString('pt-BR', { minimumFractionDigits: 2 })}`;            
          },
          footer: {
            type: 'sum',
            format: 'currency',
            label: 'Total:',
            precision: 2
          },
        }
      ],
      // ✨ AÇÕES EM LOTE ESPECÍFICAS PARA VEÍCULOS
      bulkActions: [
        {
          id: 'update-data',
          label: 'Atualizar Dados Cadastrais',
          icon: 'fas fa-sync-alt',
          subActions: [
            {
              id: 'update-brasilcredito',
              label: 'Base cadastral',
              icon: 'fas fa-building-columns',
              action: (selectedVehicles) => this.runBrasilCreditoUpdate(selectedVehicles as Vehicle[])
            },
            // {
            //   id: 'update-idwall',
            //   label: 'Via IdWall',
            //   icon: 'fas fa-shield-alt',
            //   action: (selectedVehicles) => this.runIdWallUpdate(selectedVehicles as Vehicle[])
            // }
          ]
        },
        // {
        //   id: 'send-to-maintenance',
        //   label: 'Enviar para Manutenção',
        //   icon: 'fas fa-wrench',
        //   action: (selectedVehicles) => this.sendToMaintenance(selectedVehicles as Vehicle[])
        // },
        {
          id: 'update-status',
          label: 'Alterar Status',
          icon: 'fas fa-exchange-alt',
          action: (selectedVehicles) => this.openStatusModal(selectedVehicles as Vehicle[])
        }, 
        {
          id: 'export-data',
          label: 'Exportar Dados',
          icon: 'fas fa-download',
          requiresSelection: false, // ✨ NOVO: Não requer seleção de itens
          action: (selectedVehicles) => this.openexportDataLista()
        }
      ],
      // ✨ Configuração do Side Card - Resumo do Veículo
      sideCard: {
        enabled: true,
        title: "Resumo do Veículo",
        position: "right",
        width: "400px",
        component: "summary",
        data: {
          imageField: "salesPhotoIds",
          displayFields: [
            {
              key: "status",
              label: "Status",
              type: "status"
            },
            {
              key: "price",
              label: "Preço Fipe",
              type: "currency",
              format: (value: any) => {
                if (!value) return '-';
                return `R$ ${Number(value).toLocaleString('pt-BR', { minimumFractionDigits: 2 })}`;
              }
            },
            {
              key: "manufacture_year",
              label: "Ano de Fabricação",
              type: "text",
              format: (value: any) => {
                if (!value) return '-';
                return value.toString();
              }
            },
            {
              key: "last_odometer",
              label: "Quilometragem Atual",
              type: "text",
              allowHtml: true,
              format: (value: any) => {
                if (!value) return '-';
                const km = Math.trunc(value / 1000);
                return `<span class="highlight-value">${Number(km).toLocaleString('pt-BR')} km</span>`;
              }
            },
            // {
            //   key: "next_maintenance",
            //   label: "Próxima Manutenção",
            //   type: "text",
            //   format: "date"
            // },
            {
              key: "driver_name",
              label: "Motorista Atual",
              type: "text",
              format: (value: any) => {
                if (!value) return 'Não atribuído';
                return `${value}`;
              }
            },
            {
              key: "location_person_name",
              label: "Local de Alocação",
              type: "text",
              format: (value: any) => {
                if (!value) return 'Não informado';
                return `${value}`;
              }
            }
          ],
          statusField: "status",
          statusConfig: {
            // 🎯 Fallback para status vazios ou não informados
            "": {
              label: "Não informado",
              color: "#fff3cd",
              textColor: "#856404", 
              icon: "fa-exclamation-triangle"
            },
            "*": {
              label: "Status não definido",
              color: "#f5f5f5",
              textColor: "#666",
              icon: "fa-question-circle"
            },
            "available": {
              label: "Disponível",
              color: "#d4edda",
              textColor: "#155724",
              icon: "fa-check-circle"
            },
            "in_use": {
              label: "Em uso",
              color: "#cce7ff",
              textColor: "#004085",
              icon: "fa-car"
            },
            "under_maintenance": {
              label: "Em Manutenção",
              color: "#fff3cd",
              textColor: "#856404",
              icon: "fa-wrench"
            },
            // "out_of_service": {
            //   label: "Fora de serviço",
            //   color: "#f8d7da",
            //   textColor: "#721c24",
            //   icon: "fa-times-circle"
            // },
            // "broken": {
            //   label: "Quebrado",
            //   color: "#f5c6cb",
            //   textColor: "#721c24",
            //   icon: "fa-exclamation-triangle"
            // },
            "sold": {
              label: "Vendido",
              color: "#e1bee7",
              textColor: "#4a148c",
              icon: "fa-dollar-sign"
            },
            "for_sale": {
              label: "Em venda",
              color: "#f8bbd9",
              textColor: "#880e4f",
              icon: "fa-tag"
            },
            "active": {
              label: "Ativo",
              color: "#d4edda",
              textColor: "#155724",
              icon: "fa-check-circle"
            },
            "inactive": {
              label: "Inativo",
              color: "#e2e3e5",
              textColor: "#383d41",
              icon: "fa-pause-circle"
            },
            "training": {
              label: "Em treinamento",
              color: "#b2ebf2",
              textColor: "#006064",
              icon: "fa-graduation-cap"
            },
            "under_review": {
              label: "Em revisão",
              color: "#c5cae9",
              textColor: "#1a237e",
              icon: "fa-search"
            },
            "rented": {
              label: "Alugado",
              color: "#d7ccc8",
              textColor: "#3e2723",
              icon: "fa-home"
            },
            "stolen": {
              label: "Roubado",
              color: "#ffecb3",
              textColor: "#e65100",
              icon: "fa-exclamation-triangle"
            },
            "crashed": {
              label: "Sinistrado",
              color: "#ffccbc",
              textColor: "#bf360c",
              icon: "fa-car-crash"
            },
            "scraped": {
              label: "Sucateado",
              color: "#efebe9",
              textColor: "#5d4037",
              icon: "fa-trash"
            },
            "reserved": {
              label: "Reservado",
              color: "#dcedc8",
              textColor: "#33691e",
              icon: "fa-lock"
            },
            "under_repair": {
              label: "Em reparo",
              color: "#ffe0b2",
              textColor: "#e65100",
              icon: "fa-tools"
            }
          }
        }
      }
    };
  }

  // ========================================
  // 📋 CONFIGURAÇÃO COMPLETA DO FORMULÁRIO DE VEHICLES
  // ========================================
  /**
   * 🎯 Configuração específica do formulário de veículos
   * 
   * ✅ RESPONSABILIDADE DO DOMÍNIO:
   * - Campos específicos da entidade
   * - Sub-abas e sua configuração
   * - Validações e máscaras
   * - Comportamentos específicos
   */
  getFormConfig(): TabFormConfig {

    return {
      title: 'Veículo: {{license_plate}}',
      titleFallback: 'Novo Veículo',
      entityType: 'vehicle',
      fields: [],
      submitLabel: 'Salvar Veículo',
      showCancelButton: true,
      subTabs: [
        {
          id: 'dados',
          label: 'Dados Básicos',
          icon: 'fa-car',
          enabled: true,
          order: 1,
          templateType: 'fields',
          // requiredFields: ['license_plate', 'brand', 'model', 'type'],
          fields: [
            {
              key: 'license_plate',
              label: 'Placa',
              type: 'text',
              required: true,
              placeholder: 'ABC1234',
            //   mask: 'SSS0000' // Máscara para placa brasileira
            },
            {
              key: 'number_crv',
              label: 'Número do CRV',
              type: 'text',
              placeholder: 'Número do Certificado de Registro de Veículo'
            },
            {
              key: 'brand',
              label: 'Marca',
              type: 'text',
              required: true,
              placeholder: 'Ex: Toyota, Ford, Volkswagen'
            },
            {
              key: 'model',
              label: 'Modelo',
              type: 'text',
              required: true,
              placeholder: 'Ex: Corolla, Fiesta, Gol'
            },
            {
              key: 'model_year',
              label: 'Ano do Modelo',
              type: 'number',
              placeholder: '2024',
              min: 1900,
              max: new Date().getFullYear() + 1
            },
            {
              key: 'manufacture_year',
              label: 'Ano de Fabricação',
              type: 'number',
              placeholder: '2023',
              min: 1900,
              max: new Date().getFullYear() + 1
            },
            {
              key: 'doc_year',
              label: 'Ano do Documento',
              type: 'number',
              placeholder: '2025',
              min: 1900,
              max: new Date().getFullYear() + 1
            },
            
            {
              key: 'color',
              label: 'Cor',
              type: 'color-input',
              required: true,
              options: [
                { value: { name: 'BRANCA', code: '#ffffff' }, label: 'Branco' },
                { value: { name: 'PRATO', code: '#c0c0c0' }, label: 'Prato' },
                { value: { name: 'PRETO', code: '#000000' }, label: 'Preto' },
                { value: { name: 'CINZA', code: '#808080' }, label: 'Cinza' },
                { value: { name: 'AZUL', code: '#0000ff' }, label: 'Azul' },
                { value: { name: 'VERMELHO', code: '#ff0000' }, label: 'Vermelho' },
                { value: { name: 'VERDE', code: '#008000' }, label: 'Verde' },
                { value: { name: 'AMARELO', code: '#ffff00' }, label: 'Amarelo' },
                { value: { name: 'MARROM', code: '#a52a2a' }, label: 'Marrom' },
                { value: { name: 'BEGE', code: '#f5f5dc' }, label: 'Bege' },
                { value: { name: 'DOURADO', code: '#ffd700' }, label: 'Dourado' },
                { value: { name: 'ROXO', code: '#800080' }, label: 'Roxo' },
                { value: { name: 'LARANJA', code: '#ffa500' }, label: 'Laranja' },
                { value: { name: 'ROSA', code: '#ffc0cb' }, label: 'Rosa' },
                { value: { name: 'OUTRO', code: '#999999' }, label: 'Outro' }
              ]
            },
            {
              key: 'type',
              label: 'Tipo de Veículo',
              type: 'select',
              required: true,
              options: [
                { value: 'CAR', label: 'Carro' },
                { value: 'TRUCK', label: 'Caminhão' },
                { value: 'MOTORCYCLE', label: 'Motocicleta' },
                { value: 'VAN', label: 'Van' },
                { value: 'BUS', label: 'Ônibus' },
                { value: 'TRAILER', label: 'Carreta' },
                { value: 'SEMI_TRUCK', label: 'Semi-Reboque' },
                { value: 'PICKUPTRUCK', label: 'Caminhonete' },
                { value: 'TRUCK_TRAILER', label: 'Caminhão com Carreta' },      
                { value: 'MINIBUS', label: 'Micro Ônibus' },
                { value: 'MOTOR_SCOOTER', label: 'Motoneta' },
                { value: 'MOPED', label: 'Ciclomotor' },
                { value: 'TRICYCLE', label: 'Triciclo' },
                { value: 'UNIDENTIFIED', label: 'Não identificado' },
                { value: 'UTILITY', label: 'Utilitário' },
                { value: 'OTHER', label: 'Outro' }
              ]
            },
            {
              key: 'fleetType',
              label: 'Tipo de Frota',
              type: 'select',
              required: false,
              options: [            
                { value: 'RENTAL', label: 'Rentals' },
                { value: 'CORPORATE', label: 'Corporativo' },
                { value: 'AGGREGATE', label: 'Agregado' },
                { value: 'FIXED_RENTAL', label: 'Frota Fixa - Locação' },
                { value: 'FIXED_DAILY', label: 'Frota Fixa - Diarista' },
                { value: 'OTHER', label: 'Outro' }
              ]
            },
            {
                key: 'vin',
                label: 'VIN/Chassi',
                type: 'text',
                placeholder: 'Número do VIN/Chassi'
            },
            {
              key: 'fuel',
              label: 'Tipo de Combustível',
              type: 'select',
              required: false,
                options: [
                  { value: 'Gasoline', label: 'Gasolina' },
                  { value: 'Ethanol', label: 'Etanol' },
                  { value: 'Diesel', label: 'Diesel' },
                  { value: 'Flex', label: 'Flex' },
                  { value: 'Electric', label: 'Elétrico' },
                  { value: 'Hybrid', label: 'Híbrido' },
                  { value: 'Hydrogen', label: 'Hidrogênio' },
                  { value: 'BioGas', label: 'Bio Gás' },
                  { value: 'Propane', label: 'Propano' },
                  { value: 'BioDiesel', label: 'Bio Diesel' },
                  { value: 'FlexFuel', label: 'Flex Fuel' },
                  { value: 'FlexElectric', label: 'Flex/Elétrico' },
                  { value: 'FlexGNV', label: 'Flex/GNV' },
                  { value: 'GasolineElectric', label: 'Gasolina/Elétrico' },
                  { value: 'GNV', label: 'GNV' }                  
                ]
            },
            {
              key: 'volume_tank',
              label: 'Capacidade do Tanque',
              type: 'number',
              placeholder: 'Ex: 50',
              min: 1,
              max: 1000,
              formatOptions: {
                suffix: ' L'
              }
            },

            {
              key: 'number_renavan',
              label: 'RENAVAM',
              type: 'text',
              placeholder: ''
            },

            {
              key: 'engine',
              label: 'Motor',
              type: 'text',
              placeholder: 'Ex: 1.0, 1.6, 2.0'
            },
            {
              key: 'transmission',
              label: 'Transmissão',
              type: 'select',
              options: [
                { value: 'Manual', label: 'Manual' },
                { value: 'Automatic', label: 'Automática' },
                { value: 'Automated', label: 'Automátizado' },
                { value: 'CVT', label: 'CVT' },
                { value: 'DualClutch', label: 'Dupla Embreagem' },
                { value: 'TipTronic', label: 'TipTronic' },
                { value: 'SemiAutomatic', label: 'Semi-automática' },
                { value: 'ReductionGear', label: 'Redução de Marchas' },
                { value: 'Other', label: 'Outro' }
              ]
            },
            {
              key: 'number_doors',
              label: 'Número de Portas',
              type: 'number',
              min: 1,
              max: 6
            },
            {
              key: 'number_seats',
              label: 'Número de Assentos',
              type: 'number',
              min: 1,
              max: 50
            },
            {
              key: 'last_odometer',
              label: 'Quilometragem Atual',
              type: 'kilometer-input',
              placeholder: '0',
              formatOptions: {
                locale: 'pt-BR',
                useGrouping: true,
                suffix: ' km'
              }
            },
            {
              key: 'body_type',
              label: 'Carroceria',
              type: 'select',
              required: false,
              options: [                
                { value: 'Sedan', label: 'Sedan' },
                { value: 'Hatchback', label: 'Hatchback' },
                { value: 'Suv', label: 'SUV' },
                { value: 'Pickup', label: 'Pickup' },
                { value: 'Wagon', label: 'Wagon/Perua' },
                { value: 'Coupe', label: 'Cupê' },
                { value: 'Convertible', label: 'Conversível' },
                { value: 'ChassisCab', label: 'Chassis Cabine' },
                { value: 'Other', label: 'Outro' },
              ]
            },
            {
              key: 'driver_id',
              label: '',
              type: 'remote-select',
              labelField: 'driver_name',
              remoteConfig: {
                service: this.driversService,
                searchField: 'name',
                displayField: 'name',
                valueField: 'id',
                placeholder: 'Digite o nome do motorista...',
              //   initialValue:  {
              //     id:   '',
              //     label: ''
              //  }
              }
            },
            {
              key: 'company_id',
              label: '',
              labelField: 'company_name',
              type: 'remote-select',
              remoteConfig: {
                service: this.companyService,
                searchField: 'name',
                displayField: 'name',
                valueField: 'id',
                placeholder: 'Digite o nome da empresa...',
              }
            },           
            {
              key: 'location_person_id',
              label: '',
              type: 'remote-select',
              labelField: 'location_person_name',
              remoteConfig: {
                service: this.personService,
                searchField: 'name',
                displayField: 'name',
                valueField: 'id',
                modalTitle: 'Selecione o local de alocação',
                placeholder: 'Digite o nome do local de alocação...'
              }
            },
            {
              key: 'status',
              label: 'Status',
              type: 'select',
              required: true,
              options: [
                { value: 'Inactive', label: 'Inativo' },
                { value: 'available', label: 'Disponível' },
                { value: 'in_use', label: 'Em uso' },
                { value: 'under_maintenance', label: 'Em Manutenção' },
                // { value: 'out_of_service', label: 'Fora de serviço' },
                { value: 'broken', label: 'Quebrado' },
                { value: 'sold', label: 'Vendido' },
                { value: 'for_sale', label: 'Em venda' },
                { value: 'training', label: 'Em treinamento' },
                { value: 'under_review', label: 'Em revisão' }, 
                { value: 'rented', label: 'Alugado' },
                { value: 'stolen', label: 'Roubado' },
                { value: 'crashed', label: 'Sinistrado' },
                { value: 'scraped', label: 'Sucateado' },
                { value: 'reserved', label: 'Reservado' },
                { value: 'under_repair', label: 'Em reparo' },  
              ]
            },
            {
              key: 'description',
              label: 'Descrição',
              type: 'textarea-input',
              placeholder: 'Digite observações adicionais sobre o veículo...',
              rows: 4
            }
          ]
        },
        {
          id: 'options',
          label: 'Acessórios',
          icon: 'fa-cog',
          enabled: true,
          order: 9,
          templateType: 'fields',
          requiredFields: ['options'],
          fields: [
            {
              key: 'options',
              label: 'Acessórios',
              type: 'checkbox-grouped',
              hideLabel: true,
              groups: [
                {
                  id: 'security',
                  label: 'Segurança',
                  icon: 'fa-shield-alt',
                  items: [
                    { id: 1, name: 'Airbag', value: false },
                    { id: 2, name: 'Freios ABS', value: false },
                    { id: 3, name: 'Alarme antifurto', value: false },
                    { id: 4, name: 'Cinto de 3 pontos', value: false },
                    { id: 5, name: 'Controle de tração e estabilidade', value: false },
                    { id: 6, name: 'Câmera de ré', value: false }
                  ]
                },
                {
                  id: 'comfort',
                  label: 'Conforto',
                  icon: 'fa-couch',
                  expanded: false,
                  items: [
                    { id: 51, name: 'Ar-condicionado', value: false },
                    { id: 52, name: 'Direção elétrica ou hidráulica', value: false },
                    { id: 53, name: 'Vidros e travas elétricas', value: false },
                    { id: 54, name: 'Piloto automático (Cruise Control)', value: false },
                    { id: 55, name: 'Banco com ajuste elétrico', value: false },
                    { id: 56, name: 'Retrovisores elétricos', value: false }
                  ]
                },
                {
                  id: 'multimedia',
                  label: 'Multimídia',
                  icon: 'fa-tv',
                  expanded: false,
                  items: [
                    { id: 101, name: 'Central multimídia', value: false },
                    { id: 102, name: 'GPS integrado', value: false },
                    { id: 103, name: 'Bluetooth', value: false },
                    { id: 104, name: 'USB', value: false },
                    { id: 105, name: 'Carregamento sem fio', value: false },
                    { id: 105, name: 'Sistema de som premium', value: false },
                    { id: 106, name: 'Computador de bordo', value: false },
                  ]
                },
                {
                  id: 'utility',
                  label: 'Utilidades',
                  icon: 'fa-shield-alt',
                  expanded: false,
                  items: [
                    { id: 201, name: 'Capota marítima (picapes)', value: false },
                    { id: 202, name: 'Protetor de cárter', value: false },
                    { id: 203, name: 'Protetor de caçamba', value: false },
                    { id: 204, name: 'Engate para reboque', value: false },
                    { id: 205, name: 'Trava de estepe', value: false }
                  ]
                }
              ]
            }
          ]
        },
        {
          id: 'location',
          label: 'Localização',
          icon: 'fa-map-marker-alt',
          enabled: true,
          order: 2,
          templateType: 'component',
          requiredFields: [],
          dynamicComponent: {
            selector: 'app-vehicle-location-tracker',
            inputs: {},
            outputs: {},
            dataBinding: {
               getInitialData: () => this.getVehicleLocationData()
            }
          }
        },
        {
          id: 'photo',
          label: 'Fotos',
          icon: 'fa-camera',
          enabled: true,
          order: 3,
          templateType: 'fields',
          requiredFields: ['salesPhotoIds'],
          fields: [
            {
              key: 'salesPhotoIds',
              label: 'Fotos do Veículo',
              type: 'send-image',
              required: false,
              
              imageConfiguration: {
                maxImages: 10,
                maxSizeMb: 5,
                allowedTypes: ['image/jpeg', 'image/png', 'image/webp'],
                existingImages: [] // Será preenchido dinamicamente
              }
            }
          ]
        },
        {
          id: 'insurance',
          label: 'Seguros',
          icon: 'fa-file-alt',
          enabled: true,
          order: 4,
          templateType: 'fields',
          requiredFields: [],
          fields: [
            {
              key: 'insurance_policy',
              label: 'Apólice do Seguro',
              type: 'text',
              placeholder: 'Número da apólice do seguro'
            },
            {
              key: 'insurance_due_date',
              label: 'Vencimento do Seguro',
              type: 'date'
            },
            {
              key: 'license_due_date',
              label: 'Vencimento do Licenciamento',
              type: 'date'
            }
          ]
        },
        {
          id: 'maintenance',
          label: 'Manutenção',
          icon: 'fa-wrench',
          enabled: true,
          order: 5,
          templateType: 'fields',
          requiredFields: [],
          fields: [
            {
              key: 'last_maintenance',
              label: 'Última Manutenção',
              type: 'date'
            },
            {
              key: 'next_maintenance',
              label: 'Próxima Manutenção',
              type: 'date'
            }
          ]
        },
        {
          id: 'financial',
          label: 'Financeiro',
          icon: 'fa-dollar-sign',
          enabled: true,
          order: 6,
          templateType: 'fields',
          requiredFields: [],
          fields: [
            {
              key: 'owner_person_id',
              label: '',
              type: 'remote-select',
              labelField: 'owner_person_name',
              remoteConfig: {
                service: this.personService,
                searchField: 'name',
                displayField: 'name',
                valueField: 'id',
                modalTitle: 'Selecione a pessoa proprietária',
                placeholder: 'Digite o nome do proprietária...'
              }
            },
            {
              key: 'price',
              label: 'Tabela Fipe',
              type: 'currency-input', 
              placeholder: '0,00',
              formatOptions: {
                locale: 'pt-BR',
                useGrouping: true,
                suffix: ' R$'
              }
            },
            {
              key: 'price_sale',
              label: 'Preço de Venda',
              type: 'currency-input', 
              placeholder: '0,00',
              formatOptions: {
                locale: 'pt-BR',
                useGrouping: true,
                suffix: ' R$'
              }
            },
            {
              key: 'alienation_person_id',
              label: '',
              type: 'remote-select',
              remoteConfig: {
                service: this.personService,
                searchField: 'name',
                displayField: 'name',
                valueField: 'id',
                modalTitle: 'Selecione a financeira',
                placeholder: 'Digite o nome da financeira...'
              }
            },
            {
              key: 'alienation_payment_method',
              label: 'Método de Pagamento',
              type: 'select',
              options: [
                { value: 'GARANTIA', label: 'Garantia' },
                { value: 'BOLETO', label: 'Boleto Bancário' },                
                { value: 'CDC', label: 'Crédito Direto ao Consumidor (CDC)' },
                { value: 'LEASING', label: 'Leasing' },
                { value: 'CONSORCIO', label: 'Consórcio' },
                { value: 'CONTRATO_PARTICULAR', label: 'Contrato Particular' },
                { value: 'FINANCIAMENTO', label: 'Financiamento' },
                { value: 'AVISTA', label: 'À Vista' },
                { value: 'PIX', label: 'PIX' },
                { value: 'TRANSFERENCIA', label: 'Transferência Bancária' },
                { value: 'CARTAO_CREDITO', label: 'Cartão de Crédito' },
                { value: 'CARTAO_DEBITO', label: 'Cartão de Débito' },
                { value: 'PERMUTA', label: 'Permuta / Troca' },
                { value: 'OUTRO', label: 'Outro' },
                // { value: 'DINHEIRO', label: 'Dinheiro' },
                // { value: 'COOPERATIVA', label: 'Financiamento por Cooperativa' },
                // { value: 'PARCELADO', label: 'Pagamento Parcelado Direto' },
                // { value: 'ENTRADA_PARCELAS', label: 'Entrada + Parcelas' },
                // { value: 'CHEQUE', label: 'Cheque' },
                // { value: 'CONTRATO_PARTICULAR', label: 'Contrato Particular' },
                
              ]
            },
            {
              key: 'alienation_price',
              label: 'Valor Financiado',
              type: 'currency-input', 
              placeholder: '0,00',
              formatOptions: {
                locale: 'pt-BR',
                useGrouping: true,
                suffix: ' R$'
              }
            },
            {
              key: 'alienation_payment_installment',
              label: 'Número Total de Parcelas',
              type: 'number',
              placeholder: 'Quantidade Total de Parcelas',
              min: 1
            },
            {
              key: 'alienation_payment_installment_payment',
              label: 'Número de Parcelas Pagas',
              type: 'number',   
              placeholder: 'Quantidade de Parcelas Pagas'
            },
            {
              key: 'calc_parcelas_em_aberto',
              label: 'Número de Parcelas em Aberto',
              type: 'number',
              readOnly: true,
              compute: (model: any) => {
                const total = Number(model?.alienation_payment_installment) || 0;
                const paid = Number(model?.alienation_payment_installment_payment) || 0;
                return Math.max(total - paid, 0);
              },
              computeDependencies: ['alienation_payment_installment', 'alienation_payment_installment_payment']
            },
            {
              key: 'alienation_payment_installment_value',
              label: 'Valor da Parcela',
              type: 'currency-input', 
              placeholder: '0,00',
              formatOptions: {
                locale: 'pt-BR',
                useGrouping: true,
                suffix: ' R$'
              }
            },
            {
              key: 'alienation_payment_installment_total',
              label: 'Valor Total Pago',
              type: 'currency-input',
              readOnly: true,
              compute: (model: any) => {
                const installment = Number(model?.alienation_payment_installment_value) || 0;
                const paid = Number(model?.alienation_payment_installment_payment) || 0;
                return installment * paid;
              },
              computeDependencies: ['alienation_payment_installment_value', 'alienation_payment_installment_payment'],
              formatOptions: { locale: 'pt-BR', useGrouping: true, suffix: ' R$' }
            },
            {
              key: 'calc_total_em_aberto',
              label: 'Valor Total em Aberto',
              type: 'currency-input',
              readOnly: true,
              compute: (model: any) => {
                const installment = Number(model?.alienation_payment_installment_value) || 0;
                const total = Number(model?.alienation_payment_installment) || 0;
                const paid = Number(model?.alienation_payment_installment_payment) || 0;
                const outstanding = Math.max(total - paid, 0);
                return installment * outstanding;
              },
              computeDependencies: ['alienation_payment_installment_value', 'alienation_payment_installment', 'alienation_payment_installment_payment'],
              formatOptions: { locale: 'pt-BR', useGrouping: true, suffix: ' R$' }
            }
          ]
        },
        {
          id: 'tollparking',
          label: 'Pedágios & Estacionamento',
          icon: 'fa-gas-pump',
          enabled: true,
          order: 7,
          templateType: 'component',
          dynamicComponent: {
            selector: 'app-vehicle-tollparking',
            inputs: {},
            dataBinding: {
              getInitialData: () => this.getFromDataTabLicensePlates()
            }
          },
          requiredFields: []
        },
        
        {
          id: 'abastecimento',
          label: 'Abastecimento',
          icon: 'fa-gas-pump',
          enabled: true,
          order: 7.5,
          templateType: 'component',
          dynamicComponent: {
            selector: 'app-vehicle-fuelcontroll',
            // inputs: {
            //   vehicleId: () => this.getFromDataTab()?.id,
            //   vehiclePlate: () => this.getFromDataTab()?.license_plate
            // },
            dataBinding: {
              getInitialData: () => this.getFromDataTab()
            }
          },
          requiredFields: []
        },
        
        {
          id: 'devicetracker',
          label: 'Rastreador',
          icon: 'fa-location-dot',
          enabled: true,
          order: 7,
          templateType: 'component',
          dynamicComponent: {
            selector: 'app-vehicle-devicetracker',
            inputs: {},
            dataBinding: {
              getInitialData: () => this.getFromDataTab()
            }
          },
          requiredFields: []
        },

        {
          id: 'fines',
          label: 'Multas',
          icon: 'fa-exclamation-triangle',
          enabled: true,
          order: 8,
          templateType: 'component',
          dynamicComponent: {
            selector: 'app-fines-list',
            inputs: {
              config: {
                vehicleId: () => this.getFromDataTab()?.id,
                showNewButton: true,
                showFilters: true,
                readonly: false,
                maxHeight: '500px',
                title: 'Multas do Veículo'
              }
            },
            outputs: {
              fineSelected: 'onFineSelected',
              newFineRequested: 'onNewFineRequested'
            },
            dataBinding: {
              getInitialData: () => this.getFromDataTab()
            }
          },
          requiredFields: []
        }
      ]
    };
  }

  // ========================================
  // 🎯 MÉTODOS PARA DATA BINDING DAS ABAS
  // ========================================
  
  /**
   * Obtém dados da aba selecionada para componentes filhos
   * @returns Dados do veículo da aba atual
   */
  getFromDataTab(): Vehicle {
    return this.tabSystem?.getSelectedTab()?.data as Vehicle;      
  }

  getFromDataTabLicensePlates(): string[] {
    const licensePlates = this.tabSystem?.getSelectedTab()?.data;
    return [licensePlates.license_plate];
  }

  // ========================================
  // 🎨 DADOS PARA NOVOS VEÍCULOS (OPCIONAL)
  // ========================================
  protected override getNewEntityData(): Partial<Vehicle> {
    return {
      license_plate: '',
      brand: '',
      model: '',
      model_year: new Date().getFullYear(),
      color: { name: '', code: '#ffffff' },
      type: 'CAR',
      fuel: '',
      status: 'Available',
      last_odometer: 0
    };
  }

  // ========================================
  // 🚗 SOBRESCRITA DO MÉTODO CREATENEW PARA MODAL
  // ========================================
  
  /**
   * 🎯 Sobrescreve o método createNew para abrir modal personalizado
   * Ao invés do formulário padrão, abre modal de cadastro rápido
   */
  override async createNew(): Promise<void> {
    const dialogRef = this.dialog.open(VehicleCreateModalComponent, {
      width: '400px',
      maxWidth: '95vw',
      disableClose: false,
      autoFocus: true,
              panelClass: ['vehicle-create-modal-panel'],
      data: {},
      hasBackdrop: true,
              backdropClass: 'vehicle-create-modal-backdrop'
    });

    dialogRef.afterClosed().subscribe(result => {
      if (result?.action === 'created' && result?.vehicle) {
        // Veículo criado com sucesso - apenas recarregar lista
        this.loadEntities();
      }
    });
  }

  // ========================================
  // 🗺️ MÉTODOS PARA COMPONENTE DE LOCALIZAÇÃO
  // ========================================
  
  /**
   * 🎯 Obter dados de localização do veículo para o componente de rastreamento
   */
  getVehicleLocationData(): any {
    console.log('🔍 [DEBUG] getVehicleLocationData chamado');
    
    // Retorna os dados do veículo através do tabSystem
    const currentTab = this.tabSystem?.getSelectedTab();
    console.log('🔍 [DEBUG] currentTab:', currentTab);
    
    const currentVehicle = currentTab?.data;
    console.log('🔍 [DEBUG] currentVehicle:', currentVehicle);
    
    if (!currentVehicle) {
      console.warn('⚠️ Nenhum veículo selecionado para localização');
      return null;
    }

    const vehicleData = {
      id: currentVehicle.id,
      license_plate: currentVehicle.license_plate,
      model: currentVehicle.model,
      brand: currentVehicle.brand,
      last_latitude: currentVehicle.last_latitude,
      last_longitude: currentVehicle.last_longitude,
      last_address_street: currentVehicle.last_address_street,
      last_address_number: currentVehicle.last_address_number,
      last_address_neighborhood: currentVehicle.last_address_neighborhood,
      last_address_city: currentVehicle.last_address_city,
      last_address_uf: currentVehicle.last_address_uf,
      last_address_cep: currentVehicle.last_address_cep,
      last_address_complement: currentVehicle.last_address_complement,
      last_location_timestamp: currentVehicle.last_location_timestamp,
      driverId: currentVehicle.driver_id,
      location_person_id: currentVehicle.location_person_id
    };

    console.log('🗺️ Dados de localização do veículo:', vehicleData);

    return vehicleData;
  }



  // ========================================
  // 🎯 MÉTODOS PARA COMPONENTE DE MULTAS
  // ========================================
  
  /**
   * Callback quando uma multa é selecionada para detalhes
   */
  onFineSelected(fine: any): void {
    console.log('Multa selecionada:', fine);
    // TODO: Implementar navegação para detalhes da multa
    // Pode abrir modal, navegar para página de detalhes, etc.
  }

  /**
   * Callback quando o botão "Nova Multa" é clicado
   */
  onNewFineRequested(context: { vehicleId?: number; driverId?: number }): void {
    console.log('Nova multa solicitada para contexto:', context);
    // TODO: Implementar criação de nova multa
    // Pode abrir modal de criação, navegar para formulário, etc.
  }

  // ========================================
  // ⚡ MÉTODOS PARA AÇÕES EM LOTE
  // ========================================
  private runBrasilCreditoUpdate(vehicles: Vehicle[]): void {
    console.log('Iniciando atualização via BrasilCredito para os veículos:', vehicles.map(v => v.license_plate));
    
    // Usar a lista de veículos selecionados do BaseDomainComponent
    const selectedVehicles = this.selectedRows;
    if (selectedVehicles.length === 0) {
      this.snackNotifyService.warning('Nenhum veículo selecionado', { duration: 4000 });
      return;
    }
    
    console.log('Veículos selecionados:', selectedVehicles.map(v => v.license_plate));
    
    selectedVehicles.forEach(vehicle => {
 // chamar a API integrações IntegrationService url /integration? com parametro type = 'BrasilCredito' e body = {
      this.integrationService.getIntegrationsByType('BrasilCredit').subscribe((response:any) => {
        console.log('Resposta da API:', response);
        if (response?.data?.length > 0) {
          const integration = response.data[0];
          this.vehiclesService.updateFromIntegration(vehicle.id, integration.id, vehicles).subscribe((response) => {
            console.log('Resposta da API:', response);
            this.snackNotifyService.info(`Atualização via BrasilCredito realizada com sucesso - ${vehicle.license_plate}`, { duration: 4000 });
            // atualizar a lista de veículos
            this.loadEntities();
            });
        } else {
          this.snackNotifyService.warning(response, { duration: 4000 });
        }
      });
    });

   

  }

  private runIdWallUpdate(vehicles: Vehicle[]): void {
    const selectedVehicles = this.selectedRows;
    if (selectedVehicles.length === 0) {
      this.snackNotifyService.warning('Nenhum veículo selecionado', { duration: 4000 });
      return;
    }
    
    console.log('Iniciando atualização via IdWall para os veículos:', selectedVehicles.map(v => v.license_plate));
    alert(`Atualizando ${selectedVehicles.length} veículo(s) via IdWall.`);
  }

  private sendToMaintenance(vehicles: Vehicle[]): void {
    const selectedVehicles = this.selectedRows;
    if (selectedVehicles.length === 0) {
      this.snackNotifyService.warning('Nenhum veículo selecionado', { duration: 4000 });
      return;
    }
    
    console.log('Enviando para manutenção os veículos:', selectedVehicles.map(v => v.license_plate));
    alert(`Enviando ${selectedVehicles.length} veículo(s) para manutenção.`);
  }

  // ========================================
  // 🔄 MODAL DE ALTERAÇÃO DE STATUS
  // ========================================
  
  private openexportDataLista(): void {
    // fazer um get com limit 100000 e page 1 e exportar dados para csv
    this.vehiclesService.getVehicles(1, 100000).subscribe((response: any) => {
      console.log('Resposta da API:', response);
      const data = response.data;
      
      if (!data || data.length === 0) {
        this.snackNotifyService.warning('Nenhum dado encontrado para exportar');
        return;
      }
      
      // Converter dados para CSV
      const csv = this.convertToCSV(data);
      
      // Criar e baixar o arquivo CSV
      const blob = new Blob([csv], { type: 'text/csv;charset=utf-8' });
      const url = window.URL.createObjectURL(blob);
      const link = document.createElement('a');
      link.href = url;
      link.download = `veiculos_${new Date().toISOString().split('T')[0]}.csv`;
      document.body.appendChild(link);
      link.click();
      document.body.removeChild(link);
      window.URL.revokeObjectURL(url);
      
      this.snackNotifyService.info('Dados exportados para CSV com sucesso', { duration: 4000 });
    });
  }

  /**
   * 📊 Converter array de objetos para formato CSV
   */
  private convertToCSV(data: any[]): string {
    if (!data || data.length === 0) return '';
    
    // Obter todas as chaves únicas dos objetos
    const headers = Array.from(new Set(data.flatMap(obj => Object.keys(obj))));
    
    // Criar linha de cabeçalho
    const csvHeaders = headers.join(',');
    
    // Criar linhas de dados
    const csvRows = data.map(obj => {
      return headers.map(header => {
        const value = obj[header];
        // Escapar valores que contêm vírgulas ou aspas
        if (value === null || value === undefined) return '';
        const stringValue = String(value);
        if (stringValue.includes(',') || stringValue.includes('"') || stringValue.includes('\n')) {
          return `"${stringValue.replace(/"/g, '""')}"`;
        }
        return stringValue;
      }).join(',');
    });
    
    // Combinar cabeçalho e dados
    return [csvHeaders, ...csvRows].join('\n');
  }

  /**
   * 🎯 Abre modal para alteração de status dos veículos selecionados
   */
  private openStatusModal(selectedVehicles: Vehicle[]): void {
    if (selectedVehicles.length === 0) {
      this.snackNotifyService.warning('Selecione pelo menos um veículo para alterar o status', { duration: 4000 });
      return;
    }

    console.log('🔄 Abrindo modal de alteração de status para veículos:', selectedVehicles.map(v => v.license_plate));

    const dialogRef = this.dialog.open(VehicleStatusModalComponent, {
      width: '600px',
      maxWidth: '95vw',
      disableClose: false,
      autoFocus: true,
      panelClass: ['vehicle-status-modal-panel'],
      data: { selectedVehicles },
      hasBackdrop: true,
      backdropClass: 'vehicle-status-modal-backdrop'
    });

    dialogRef.afterClosed().subscribe(result => {
      if (result?.action === 'updated') {
        console.log('✅ Status atualizado com sucesso:', result);
        
        // Recarregar lista de veículos
        this.loadEntities();
        
        // Limpar seleção atual
        this.selectedRows = [];
        
        // Feedback adicional se houve falhas
        if (result.failed > 0) {
          this.snackNotifyService.info(
            `Operação concluída: ${result.successful} sucesso(s), ${result.failed} erro(s)`,
            { duration: 5000 }
          );
        }
      } else if (result?.action === 'cancelled') {
        console.log('❌ Alteração de status cancelada pelo usuário');
      }
    });
  }
} 