import { Component, ChangeDetectorRef } from "@angular/core";
import { CommonModule, DatePipe } from "@angular/common";

import { TitleService } from "../../shared/services/theme/title.service";
import { HeaderActionsService } from "../../shared/services/header-actions.service";
import { CompaniesService } from "./companies.service";
import { Company } from "./company.interface";

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 { PhoneFormatter } from "../../shared/utils/phone-formatter.util";
import { ConfirmationService } from '../../shared/services/confirmation/confirmation.service';

/**
 * 🏢 CompaniesComponent - Gerenciamento de Empresas
 * 
 * Seguindo o padrão BaseDomainComponent + Registry Pattern.
 * 
 * ✨ Este componente implementa o mesmo padrão minimalista do DriversComponent!
 * 
 * 🚀 Para customizações: configure getDomainConfig() e getFormConfig()
 */
@Component({
  selector: 'app-companies',
  standalone: true,
  imports: [CommonModule, TabSystemComponent],
  providers: [DatePipe],
  templateUrl: './companies.component.html',
  styleUrl: './companies.component.scss'
})
export class CompaniesComponent extends BaseDomainComponent<Company> {

  constructor(
    private companiesService: CompaniesService, // ✅ Injeção direta do service
    titleService: TitleService,
    headerActionsService: HeaderActionsService,
    cdr: ChangeDetectorRef,
    private datePipe: DatePipe,
    private tabFormConfigService: TabFormConfigService,
    private confirmationService: ConfirmationService
  ) {
    // ✅ ARQUITETURA ORIGINAL: CompaniesService passado diretamente
    super(titleService, headerActionsService, cdr, companiesService);
    
    // 🚀 REGISTRAR configuração específica de empresas
    this.registerFormConfig();
  }
 
  /**
   * 🎯 NOVO: Registra a configuração de formulário específica para empresas
   * Chamado no construtor para garantir que está disponível
   */
  private registerFormConfig(): void {
    this.tabFormConfigService.registerFormConfig('company', () => this.getFormConfig());
  }

  // ========================================
  // 🎯 ÚNICA CONFIGURAÇÃO NECESSÁRIA
  // ========================================
  protected override getDomainConfig(): DomainConfig {
    return {
      domain: 'company',
      title: 'Empresas',
      entityName: 'empresa',
      subTabs: ['dados', 'photos', 'documents'], // ✅ Solicitado: fotos e documentos
      columns: [
        { field: "id", header: "Id", sortable: true, filterable: true },
        { field: "name", header: "Nome", sortable: true, filterable: true },
        { field: "trade_name", header: "Nome Fantasia", sortable: true, filterable: true },
        { field: "cnpj", header: "CNPJ", sortable: true, filterable: true },
        { field: "email", header: "Email", sortable: true, filterable: true },
        { 
          field: "phone", 
          header: "Telefone", 
          sortable: true, 
          filterable: true,
          label: (phone: any) => PhoneFormatter.format(phone),
          format: "phone"
        },
        { field: "company_type", header: "Tipo", sortable: true, filterable: true },
        { field: "segment", header: "Segmento", sortable: true, filterable: true },
        {
            field: "address_city",  
            header: "Cidade",
            sortable: true,
            filterable: true
        },            
        {
          field: "address_uf",
          header: "Estado",
          sortable: true,
          filterable: true
        },
        {
          field: "active",
          header: "Status",
          sortable: true,
          filterable: true,
          allowHtml: true,
          label: (value: any) => {
            if (value === true || value === 'true') {
              return '<span class="status-badge status-active">Ativo</span>';
            } else {
              return '<span class="status-badge status-inactive">Inativo</span>';
            }
          }
        },
        {
          field: "created_at",
          header: "Criado em",
          sortable: true,
          filterable: true,
          label: (date: any) => this.datePipe.transform(date,"dd/MM/yyyy") || "-"
        }
      ]
    };
  }

  // ========================================
  // 🎯 CONFIGURAÇÃO DO FORMULÁRIO
  // ========================================
  getFormConfig(): TabFormConfig {
    return {
      title: 'Dados da Empresa',
      entityType: 'company',
      
      fields: [
        // 🎯 CAMPOS GLOBAIS: Deixar vazio - todos os campos estão nas sub-abas
      ],
      submitLabel: 'Salvar Empresa',
      showCancelButton: true,
      
      // 🎯 SUB-ABAS CONFIGURADAS
      subTabs: [
        {
          id: 'dados',
          label: 'Dados Principais',
          icon: 'fa-building',
          enabled: true,
          order: 1,
          templateType: 'fields',
          requiredFields: ['name'],
          fields: [
            {
                key: 'name',
                label: 'Nome da Empresa',
                type: 'text',
                required: true,
                placeholder: 'Nome completo da empresa'
              },
              {
                key: 'trade_name',
                label: 'Nome Fantasia',
                type: 'text',
                required: false,
                placeholder: 'Nome fantasia (opcional)'
              },
              {
                key: 'cnpj',
                label: 'CNPJ',
                type: 'text',
                required: false,
                mask: '00.000.000/0000-00',
                placeholder: '00.000.000/0000-00'
              },
              {
                key: 'ie',
                label: 'Inscrição Estadual',
                type: 'text',
                required: false,
                placeholder: 'Inscrição Estadual'
              },
              {
                key: 'im',
                label: 'Inscrição Municipal',
                type: 'text',
                required: false,
                placeholder: 'Inscrição Municipal'
              },
              {
                key: 'email',
                label: 'Email',
                type: 'email',
                required: false,
                placeholder: 'email@empresa.com'
              },
              {
                key: 'phone',
                label: 'Telefone',
                type: 'text',
                required: false,
                mask: '(00) 00000-0000',
                placeholder: '(00) 00000-0000'
              },
              {
                key: 'website',
                label: 'Website',
                type: 'text',
                required: false,
                placeholder: 'https://www.empresa.com'
              },
              {
                key: 'company_type',
                label: 'Tipo de Empresa',
                type: 'select',
                required: false,
                options: [
                  { value: 'ltda', label: 'LTDA' },
                  { value: 'sa', label: 'S.A.' },
                  { value: 'mei', label: 'MEI' },
                  { value: 'me', label: 'ME' },
                  { value: 'epp', label: 'EPP' },
                  { value: 'outros', label: 'Outros' }
                ]
              },
              {
                key: 'company_size',
                label: 'Porte da Empresa',
                type: 'select',
                required: false,
                options: [
                  { value: 'micro', label: 'Micro' },
                  { value: 'pequena', label: 'Pequena' },
                  { value: 'media', label: 'Média' },
                  { value: 'grande', label: 'Grande' }
                ]
              },
              {
                key: 'segment',
                label: 'Segmento',
                type: 'text',
                required: false,
                placeholder: 'Ex: Logística, Transportes, etc.'
              },
              {
                key: 'active',
                label: 'Empresa Ativa',
                type: 'checkbox',
                required: false,
                defaultValue: true
              },
              {
                key: 'description',
                label: 'Descrição',
                type: 'textarea',
                required: false,
                placeholder: 'Descrição da empresa...'
              }
          ]

        },
        {
          id: 'endereco',
          label: 'Endereço',
          icon: 'fa-map-marker-alt',
          enabled: true,
          order: 2,
          templateType: 'fields',
          requiredFields: [],
          fields: [
            // ✅ CAMPOS DE ENDEREÇO COM BUSCA AUTOMÁTICA DE CEP
            {
              key: 'address_cep',
              label: 'CEP',
              type: 'text',
              required: false,
              mask: '00000-000',
              placeholder: '00000-000',
              onValueChange: (value: string, formGroup: any) => {
                // Busca automática de CEP quando valor é alterado
                const cleanCep = value?.replace(/\D/g, '') || '';
                if (cleanCep.length === 8) {
                  // O handleCepChange será chamado automaticamente pelo generic-tab-form
                  // através do setupFormChangeDetection
                }
              }
            },
            {
              key: 'address_uf',
              label: 'Estado',
              type: 'text',
              required: false,
              readOnly: true, // 🔒 Campo somente leitura - preenchido automaticamente pelo CEP
              placeholder: 'Estado (preenchido automaticamente)'
            },
            {
              key: 'address_city',
              label: 'Cidade',
              type: 'text',
              required: false,
              readOnly: true, // 🔒 Campo somente leitura - preenchido automaticamente pelo CEP
              placeholder: 'Cidade (preenchida automaticamente)'
            },
            {
              key: 'address_neighborhood',
              label: 'Bairro',
              type: 'text',
              required: false,
              readOnly: true, // 🔒 Campo somente leitura - preenchido automaticamente pelo CEP
              placeholder: 'Bairro (preenchido automaticamente)'
            },
            {
              key: 'address_street',
              label: 'Rua',
              type: 'text',
              required: false,
              readOnly: true, // 🔒 Campo somente leitura - preenchido automaticamente pelo CEP
              placeholder: 'Rua (preenchida automaticamente)'
            },
            {
              key: 'address_number',
              label: 'Número',
              type: 'text',
              required: false,
              placeholder: 'Número do endereço'
            },
            {
              key: 'address_complement',
              label: 'Complemento',
              type: 'text',
              required: false,
              placeholder: 'Sala, andar, etc. (opcional)'
            }
          ]
        },
        {
          id: 'contato',
          label: 'Contato',
          icon: 'fa-address-book',
          enabled: true,
          order: 3,
          templateType: 'fields',
          requiredFields: [],
          fields: [
            {
              key: 'contact_name',
              label: 'Nome do Contato',
              type: 'text',
              required: false,
              placeholder: 'Nome do responsável'
            },
            {
              key: 'contact_email',
              label: 'Email do Contato',
              type: 'email',
              required: false,
              placeholder: 'contato@empresa.com'
            },
            {
              key: 'contact_phone',
              label: 'Telefone do Contato',
              type: 'text',
              required: false,
              mask: '(00) 00000-0000',
              placeholder: '(00) 00000-0000'
            }
          ]
        },
        {
          id: 'photos',
          label: 'Fotos',
          icon: 'fa-images',
          enabled: true,
          order: 4,
          templateType: 'custom', // 🎯 Em desenvolvimento
          comingSoon: true,
          requiredFields: []
        },
        {
          id: 'documents',
          label: 'Documentos',
          icon: 'fa-file-alt',
          enabled: true,
          order: 5,
          templateType: 'custom', // 🎯 Em desenvolvimento
          comingSoon: true,
          requiredFields: []
        }
      ]
    };
  }

  // ========================================
  // 🎯 MÉTODOS AUXILIARES
  // ========================================
  
  /**
   * 🎯 NOVO: Dados padrão para nova empresa
   */
  protected override getNewEntityData(): Partial<Company> {
    return {
      name: '',
      trade_name: '',
      cnpj: '',
      email: '',
      phone: '',
      active: true,
      company_type: 'ltda',
      company_size: 'micro'
    };
  }
} 