
export type ServiciosContratoFormFields = Partial<Record<
    import('../ComponentesComunes/serviciosContratoConfig').ServicioContratoKey,
    boolean | string
>>;

export interface CupsGasSectionProps {
    comercializadoras: any,
    datos: FormDataGas,
    productos: any,
    anexos: any,
    tipoprecio: any,
    clienteId?: number | null,
    clientes: any,
    cupsData: CupsOption[],
    localidades: any,
    onChange: (formData: FormDataGas) => void;
    onEliminar?: () => void;
    tarifasGas?: any[];
}

export interface CupsElectricSectionProps {
    datos: FormDataElectrico,
    comercializadoras: any,
    productos: any,
    anexos: any,
    tipoprecio: any,
    clienteId?: number | null,
    clientes: any,
    cupsData: CupsOption[],
    localidades: any,
    onChange: (formData: FormDataElectrico) => void;
    onEliminar?: () => void;
    tarifasElectricas?: any[];
}

export interface FormDataGas extends ServiciosContratoFormFields {
    razon_social?: string;  // solo para multicliente y multipunto
    documento_fiscal?: string; // solo para multicliente y multipunto
    cupsGasId: string;
    cupsGas?: string; // Alias para codigoCups
    codigoCups: string;
    direccionGas: string;
    escaleraGas: string;
    localidadGas: string;
    DesLoc: string; 
    EscPunSum: string;
    PlaPunSum: string;
    PuePunSum: string;
    provinciaGas: string;
    DesPro: string;
    codigo_postal: string;
    //cpGas: string;
    tarifaGas: string;
    nombreTarifa: string;
    corpoGo: string;
    Id_Tarifa_Automatica: string;
    consumoGas: string;
    caudal_diario: string;
    comercializadora: string;
    comercializadoraNombre: string;
    CodigoServicio: string;
    producto: string;
    productoNombre: string;
    anexo: string;
    anexoNombre: string;
    subtarifa?: string;
    tipoprecio: string;
    comentarioGas: string;
    fechaInicio?: string;
    fechaFin?: string;
    GDO?: boolean | string;
    permanencia?: boolean | string;
    cambioTitular?: boolean | string;
    cambioPotencia?: boolean | string;
    codigoServicioProducto?: string;
    nombretarifa?: string;
    productCode?: string;
    version?: string;
}

export interface FormDataElectrico extends ServiciosContratoFormFields {
    razon_social?: string;  // solo para multicliente y multipunto
    documento_fiscal?: string; // solo para multicliente y multipunto
    cupsId: string;
    cups_electrico?: string; // Alias para codigoCups
    codigoCups: string;
    direccion: string;
    EscPunSum: string;
    PlaPunSum: string;
    PuePunSum: string;
    CodLoc: number | null;
    localidad: number | null;
    DesLoc: string;
    provincia: number | null;
    DesPro: string;
    codigo_postal: string;
    tarifa: string;
    nombreTarifa: string;
    corpoGo: string;
    Id_Tarifa_Automatica: string;
    consumo_kw: string;
    potencia1: string;
    potencia2: string;
    potencia3: string;
    potencia4: string;
    potencia5: string;
    potencia6: string;
    comercializadora: string;
    comercializadoraNombre: string;
    CodigoServicio: string;
    producto: string;
    productoNombre: string;
    anexo: string;
    anexoNombre: string;
    subtarifa?: string;
    tipoprecio: string;
    comentarios: string;
    fechaInicio?: string;
    fechaFin?: string;
    GDO?: boolean | string;
    permanencia?: boolean | string;
    cambioTitular?: boolean | string;
    cambioPotencia?: boolean | string;
    codigoServicioProducto?: string;
    nombretarifa?: string;
    productCode?: string;
    version?: string;

}

export interface VentanaOption {
    TarifaCUPS: string;
    FechaInicioPoliza: string;
    FechaFinalPoliza: string;
}

export interface Localidad {
    CodLoc: number;
    CPLoc: string;
    DesLoc: string;
    provincia: {
        CodPro: number;
        DesPro: string;
    };
}

export interface TarifaElectrica {
    id: number;
    nombre: string;
    comercializadora_id: number;
}

export interface TarifaGasOption {
    CodTarGas: string;
    NomTarGas: string;
}

export interface TarifaElectricaOption {
    CodTarEle: string;
    NomTarEle: string;
}

export interface CupsOption {
    CodCli: number;
    cupsId: string;
    cupsGasId: string;
    codigoCups: string;
    direccion: string;
    nombreTarifa: string;
    tarifa: string;
    ConAnuCup: string;
    DerAccKW: string;
    PotConP1: string;
    PotConP2: string;
    PotConP3: string;
    PotConP4: string;
    PotConP5: string;
    PotConP6: string;
    EscPunSum: string;
    PlaPunSum: string;
    PuePunSum: string;
    CPLocSoc: string;
    CodLoc: number;
    corpoGo: string;
    DesLoc: string;
    DesPro: string;
    codigo_postal: string;
    localidad: number;
    provincia: number;
    Id_Tarifa_Automatica: string;
    subtarifa?: string;
}

export interface TarifaOption {
    CodTarEle: string;
    NomTarEle: string;
}

export interface ContratoFormChildRef {
  saveElectricoForm?: () => boolean;
  saveGasForm?: () => boolean;
}

export interface Contrato  {
  CodConCom?: number | string;
  CodProCom?: number | string;
  TipProCom?: number;
  RefCon: string;
  FecConCom: string;
  CodCli: string;
  NumCifCli: string;
  RazSocCli: string;
  CodCom: string;
};

// --- Tipos compartidos para consulta multi-cliente/multi-punto ---

export interface CupsElectrico {
  CodCupsEle: number;
  CodPunSum: number;
  CodDis: number;
  CUPsEle: string;
  CodTarElec: number;
  PotConP1?: string;
  PotConP2?: string;
  PotConP3?: string;
  PotConP4?: string;
  PotConP5?: string;
  PotConP6?: string;
  PotMaxBie?: string;
  FecAltCup?: string;
  FecUltLec?: string;
  TipServ?: number;
  ConAnuCup: string;
  DerAccKW?: string;
  EstCUPs: number;
  corpoGo: string;
  created_at?: string;
  updated_at?: string;
  created_by?: number;
  updated_by?: number;
  tarifa_electrica?: {
    CodTarEle: number;
    TipTen: number;
    NomTarEle: string;
    CanPerTar: number;
    MinPotCon: string;
    MaxPotCon: string;
    EstTarEle: number;
  }
}

export interface CupsGas {
  CodCupsGas?: number;
  CodPunSum?: number;
  CupsGas?: string;
  CodTarGas?: number;
  CauDiaGas?: string;
  FecAltCup?: string;
  FecUltLec?: string;
  ConAnuCup?: string;
  EstCUPs?: number;
  corpoGo?: string;
  created_at?: string;
  updated_at?: string;
  created_by?: number;
  updated_by?: number;
  tarifa_gas?: {
    CodTarGas?: number;
    NomTarGas?: string;
    DesTarGas?: string;
    CanPerTar?: number;
    MinCauDia?: string;
    MaxCauDia?: string;
    EstTarGas?: number;
  }
}

// resources/js/types/ApiResponse.ts

export interface Cliente {
    CodCli: number;
    RazSocCli: string;
    NomComCli: string;
    NumCifCli: string;
    CodTipViaSoc: number;
    NomViaDomSoc: string;
    NumViaDomSoc: string;
    BloDomSoc: string;
    EscDomSoc: string;
    PlaDomSoc: string;
    PueDomSoc: string;
    CodLocSoc: number;
    CPLocSoc: string;
    CodTipViaFis: number;
    NomViaDomFis: string;
    NumViaDomFis: string;
    BloDomFis: string;
    EscDomFis: string;
    PlaDomFis: string;
    PueDomFis: string;
    CodLocFis: number;
    CPLocFis: string;
    TelFijCli: string;
    TelMovCli: string;
    EmaCli: string;
    EmaCliOpc: string | null;
    WebCli: string;
    CodTipCli: number;
    CodSecCli: number;
    FecIniCli: string;
    CodCom: number;
    CodCol: number;
    ObsCli: string;
    EstCli: number;
    DireccionBBDD: string;
    created_at: string;
    updated_at: string | null;
    created_by: string | null;
    updated_by: string | null;
    contacto_detalle_cliente?: ContactoDetalleCliente[];

}



export interface PuntoSuministro {
  CodPunSum: number;
  CodCli: number;
  TipRegDir?: number;
  CodTipVia?: number;
  NomViaPunSum: string;
  NumViaPunSum: string;
  BloPunSum?: string;
  EscPunSum?: string;
  PlaPunSum?: string;
  PuePunSum?: string;
  CodLoc: number;
  CPLocSoc: string;
  TelPunSum?: string;
  CodTipInm?: number;
  RefCasPunSum?: string;
  DimPunSum?: number;
  ObsPunSum?: string;
  EstPunSum: number;
  AclPunSum?: string;
  created_at?: string;
  updated_at?: string;
  created_by?: number;
  updated_by?: number;
  cups_electrico?: CupsElectrico[];
  cups_gas?: CupsGas[];
  cliente?: Cliente;
  localidad?: {
    CodLoc: number;
    CodPro: number;
    DesLoc: string;
    CPLoc: string;
    provincia?: {
      CodPro: number;
      DesPro: string;
    }
  }
}

export interface ContactoDetalleCliente {
  CodDetCliCont: number;
  CodConCli: number;
  CodCli: number;
  EsRepLeg: boolean;
  TieFacEsc: boolean;
  EsPrescritor: boolean;
  EsColaborador: boolean;
  DocPod?: string;
  CanMinRep?: number;
  TipRepr?: number;
  EstCliCol?: number;
  // Relaciones
  cliente?: Cliente;
  contacto?: Contacto;
}

export interface Contacto {

  // --- Campos de T_ContactoCliente ---
  CodConCli: number;

  CodTipViaFis?: number | null;
  NomViaDomFis?: string | null;
  NumViaDomFis?: string | null;
  BloPunSum?: string | null;
  EscPunSum?: string | null;
  PlaPunSum?: string | null;
  PuePunSum?: string | null;
  CPLocFis?: string | null;
  CodLocFis?: number | null;

  NomConCli: string;
  NIFConCli?: string | null;
  DocNIF?: string | null;
  FecCreateDoc?: string | null;
  ConPrin?: string | null;
  NumColeCon?: string | null;

  TelFijConCli?: string | null;
  TelCelConCli?: string | null;
  EmaConCli?: string | null;

  CarConCli: string;
  ObsConC?: string | null;
  EstConCli?: number | null;

  EsRepLeg?: boolean | number | null;
  TieFacEsc?: boolean | number | null;
  EsPrescritor?: boolean | number | null;
  CodTipCon?: number | null;
  EsColaborador?: boolean | number | null;

  DocPod?: string | null;
  CanMinRep?: number | null;
  TipRepr?: number | null;
  CodCli?: number | null;

  nrcomercialacreditado?: string | null;
  nrcomercialacreditadoadx?: string | null;

  created_at?: string | null;
  updated_at?: string | null;
  created_by?: number | null;
  updated_by?: number | null;

  iban?: string | null;
  telpersonal?: string | null;
  emapersonal?: string | null;
  recibe_correo_masivo?: boolean | number | null;

  // --- Relaciones / extensiones (no forman parte de la tabla directamente) ---
  tipoViaFisica?: {
    CodTipVia: number;
    DesTipVia: string;
  };
  localidad?: {
    CodLoc: number;
    DesLoc: string;
    CPLoc: string;
    provincia?: {
      CodPro: number;
      DesPro: string;
    };
  };
  contacto_detalle_cliente?: ContactoDetalleCliente;
}

export interface PropuestaComercialCups {
  CodProComCup: number;
  CodProComCli: number;
  CodPunSum: number;
  CodCup: number;
  CodTar: number;
  CupGas: CupsGas;
  CupEle: CupsElectrico;
  //parche
  cups_electrico: CupsElectrico;
  cups_gas: CupsGas;
  //
  PotEleConP1?: string;
  PotEleConP2?: string;
  PotEleConP3?: string;
  PotEleConP4?: string;
  PotEleConP5?: string;
  PotEleConP6?: string;
  FecActCUPs?: string;
  FecVenCUPs?: string;
  RenCup?: number;
  ImpAho?: string;
  PorAho?: string;
  ObsCup?: string;
  ConCup?: string;
  CauDiaGas?: string;
  corpoGo?: string;
  TipCups: number; // 1 para Eléctrica, 2 para Gas
  EstConCups?: number;
  NrContratoAudax?: string;
  EstSincAudax?: string;
  comision_audax?: string;
  comision_sinc_audx?: number;
  CodCom?: number;
  CodPro?: number;
  CodAnePro?: number;
  CorpoGo?: string;
  TipPre?: string;
  precio_adx?: string;
  punto_suministro?: PuntoSuministro;
  comercializadora?: {
    CodCom: number;
    RazSocCom: string;
    NomComCom?: string;
    NumCifCom?: string;
    [key: string]: any;
  };
  producto?: {
    CodPro: number;
    DesPro: string;
    [key: string]: any;
  };
  anexo_producto?: {
    CodAnePro: number;
    DesAnePro: string;
    [key: string]: any;
  };
  // Relaciones de tarifa cargadas a nivel de propuesta
  tarifa_electrica?: {
    CodTarEle: number;
    NomTarEle: string;
    TipTen?: number;
    CanPerTar?: number;
    MinPotCon?: string;
    MaxPotCon?: string;
    EstTarEle?: number;
  };
  tarifa_gas?: {
    CodTarGas?: number;
    NomTarGas?: string;
    DesTarGas?: string;
    CanPerTar?: number;
    MinCauDia?: string;
    MaxCauDia?: string;
    EstTarGas?: number;
  };
}

export interface PropuestaComercialCliente {
  CodProComCli: number;
  CodProCom: number;
  CodCli: number;
  cliente?: Cliente;
  contacto?: Contacto;
  propuesta_comercial_cups: PropuestaComercialCups[];
}

export interface PropuestaComercial {
  CodProCom: number;
  FecProCom: string;
  TipProCom: number;
  IdOferta?: string | null;
  CodCon?: string | null;
  PorAhoTot?: string;
  ImpAhoTot?: string;
  EstProCom: string;
  JusRecProCom?: string | null;
  CodCom?: number | null;
  CodPro?: number | null;
  CodAnePro?: number | null;
  TipPre?: number | null;
  UltTipSeg?: string | null;
  ObsProCom?: string | null;
  RefProCom: string;
  CorpoGo?: string | null;
  created_at?: string;
  updated_at?: string;
  created_by?: number;
  updated_by?: number;
  enComun?: number;
  precio_adx?: string | null;
  comercializadora?: Comercializadora;
  propuesta_comercial_cliente: PropuestaComercialCliente[];
  documentos_propuestas: DocumentoPropuesta[];
}

export interface Comercializadora {
    id: number;
    nombre: string;
    servicio_integracion: string;
}

export interface LeadFicha { // mínima para referencia opcional
  id: number;
  hactuaciones_agentes?: number | null;
  hid_caes?: number | null;
  abreviacion_caes?: string | null;
  caes?: string | null;
  tipo?: number | null;
  url_documento?: string | null;
  seleccionado?: boolean | number | null;
  version?: string | null;
  created_at?: string;
  updated_at?: string;
}

export interface Caes {
  id?: number;
  abreviacion_caes?: string | null;
  caes?: string | null;
  tipo?: number | null; // FK -> tipos_caes.id
  url_documento?: string | null;
  ruta_documento_inter?: string | null;
  version?: string | null;
  created_at?: string;
  updated_at?: string | null;
  created_by?: number | null;
  updated_by?: number | null;
  // Relaciones cargadas opcionalmente
  tipo_caes_relacion?: {
    id: number;
    tipo_caes: string;
    estado: number;
  };
  fichas?: LeadFicha[]; // si se carga la relación inversa
}

export interface LeadDireccion { // simplificada para relación dentro de Lead
  id: number;
  hcod_lead: number;
  direccion: string;
  codigo_postal: string;
  provincia: string;
  tipo_cliente?: number | null;
  localidad?: string | null;
  refCatastral?: string | null;
  gps?: string | null;
}

export interface Lead {
  CodCli: number; // PK
  RazSocCli: string;
  NomComCli: string;
  NumCifCli?: string | null;
  CodTipViaSoc?: number | null;
  NomViaDomSoc?: string | null;
  NumViaDomSoc?: string | null;
  BloDomSoc?: string | null;
  EscDomSoc?: string | null;
  PlaDomSoc?: string | null;
  PueDomSoc?: string | null;
  CodLocSoc?: number | null;
  CPLocSoc?: string | null;
  CodTipViaFis?: number | null;
  NomViaDomFis?: string | null;
  NumViaDomFis?: string | null;
  BloDomFis?: string | null;
  EscDomFis?: string | null;
  PlaDomFis?: string | null;
  PueDomFis?: string | null;
  CodLocFis?: number | null;
  CPLocFis?: string | null;
  TelFijCli?: string | null;
  TelMovCli?: string | null;
  EmaCli?: string | null;
  EmaCliOpc?: string | null;
  WebCli?: string | null;
  CodTipCli?: number | null;
  CodSecCli?: number | null;
  FecIniCli: string; // date
  CodCom?: number | null;
  CodCol?: number | null;
  ObsCli?: string | null;
  EstCli: number; // tinyint(1)
  DireccionBBDD?: string | null;
  created_at?: string | null;
  updated_at?: string | null;
  created_by?: number | null;
  updated_by?: number | null;
  tipogestion?: number | null;
  asuntogestiones?: string | null;
  importe?: string | null; // decimal(26,2) como string
  CodConCli?: number | null;
  canal?: string | null;
  comercial?: string | null;
  int_motivo_rechazo?: number | null;
  descripcion_rechazo?: string | null;
  observaciones_documentos?: string | null;
  observaciones_datos_suministros?: string | null;
  tipo_caes?: number | null;
  json?: any; // contenido dinámico
  nuevo_metodo_caes?: boolean | null;
  numeroCuenta?: string | null;
  // Relaciones
  direcciones?: LeadDireccion[];
}

// Re-exportamos las interfaces globales para mantener compatibilidad
export type { EstadoContrato } from "../../../../interfaces";
export { ESTADOS_CONTRATO } from "../../../../interfaces";


export interface TableRowElectrico {
    cups_id: string;
    localidad: string;
    direccion_suministro: string;
    comercializadora_id: number;
    producto_id: number;
    tarifa_id: number;
    tipo_precio_id: number;
    anexo: string;
    fecha_inicio: string;
    fecha_fin: string;
    precio_te: string;
    precio_p1: string;
    precio_p2: string;
    precio_p3: string;
    precio_p4: string;
    precio_p5: string;
    precio_p6: string;
}

export interface TableRowGas {
    cups_id: string;
    localidad: string;
    direccion_suministro: string;
    comercializadora_id: number;
    producto_id: number;
    tarifa_id: number;
    tipo_precio_id: number;
    anexo: string;
    fecha_inicio: string;
    fecha_fin: string;
    precio_termino_fijo: string;
    precio_termino_variable: string;
}


export interface TipoPrecio {
    id: number;
    nombre: string;
    comercializadora_id: number;
}

export interface DocumentoPropuesta {
    CodProCom: number;
    Comercializadora: string;
    ConGdo: false | true;
    NombreArchivo: string;
    NombrePlantilla: string;
    Producto: string;
    Ruta: string;
    Tarifa: string;
    TipoEnergia: 'electricidad' | 'gas' ;
    TipoPrecio: string | null;
    created_at: string;
    id: number;
    tenant_id: number | null;
    updated_at: string;
}
