type FlashType = 'success' | 'message' | 'info' | 'warning' | 'error';

// Interfaces globales para la aplicación
export interface IFlashMessage {
  success: string | null;
  message: string | null;
  error: string | null;
  type: FlashType | null;
}

export interface EstadoContrato {
  key: number;
  valor: string;
}

export const ESTADOS_CONTRATO: EstadoContrato[] = [
  { key: 1, valor: "Contrato" },
  { key: 2, valor: "Implícito" },
  { key: 3, valor: "Baja Recuperable" },
  { key: 4, valor: "Baja Definitiva" }
];

// Interfaces para tipado de contratos
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;
  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;
  CupsGas?: string; // Alias para compatibilidad
  CodTarGas?: number;
  CauDiaGas?: string;
  FecAltCup?: string;
  FecUltLec?: string;
  ConAnuCup?: string;
  EstCUPs?: number;
  created_at?: string;
  updated_at?: string;
  created_by?: number;
  updated_by?: number;
  tarifa_gas?: {
    CodTarGas?: number;
    DesTarGas?: string;
    NomTarGas?: string; // Alias para compatibilidad
    CanPerTar?: number;
    MinCauDia?: string;
    MaxCauDia?: string;
    EstTarGas?: number;
  }
}

export interface Cliente {
  CodCli: number;
  RazSocCli: string;
  NomComCli?: string;
  NumCifCli: string;
  EstCli?: number;
  WebCli?: string;
  ObsCli?: string;
  CodTipViaSoc?: number;
  NomViaDomSoc?: string;
  NumViaDomSoc?: string;
  BloDomSoc?: string;
  EscDomSoc?: string;
  PlaDomSoc?: string;
  PueDomSoc?: string;
  CodLocSoc?: number;
  CPLocSoc?: string;
  TelFijCli?: string;
  TelMovCli?: string;
  EmaCli?: string;
  EmaCliOpc?: string;
  [key: string]: any;
}

export interface Producto {
  CodPro: number;
  CodCom: number;
  DesPro: string;
  SerGas: number;
  SerEle: number;
  ObsPro?: string;
  FecIniPro?: string;
  EstPro: number;
  CodigoServicio?: string;
  created_at?: string;
  updated_at?: string;
  created_by?: number;
  updated_by?: number;
  comercializadora?: {
    CodCom: number;
    RazSocCom: string;
    NomComCom?: string;
    NumCifCom?: string;
    [key: string]: any;
  };
  [key: string]: any;
}

export interface AnexoProducto {
  CodAnePro: number;
  DesAnePro: string;
  CodPro: number;
  SerGas: number;
  SerEle: number;
  TipPre?: string;
  DocAnePro?: string;
  FecCreateDoc?: string;
  ObsAnePro?: string;
  FecIniAne?: string;
  CodTipCom: number;
  EstCom: number;
  EstAne: number;
  created_at?: string;
  updated_at?: string;
  created_by?: number;
  updated_by?: number;
  producto?: Producto;
  tipoComision?: {
    CodTipCom: number;
    DesTipCom: string;
    [key: string]: any;
  };
  [key: string]: any;
}

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 Contacto {
  CodConCli: number;
  NomConCli: string;
  NIFConCli: string;
  CodTipViaFis?: number;
  NomViaDomFis?: string;
  NumViaDomFis?: string;
  EmaConCli?: string;
  BloPunSum?: string;
  EscPunSum?: string;
  PlaPunSum?: string;
  PuePunSum?: string;
  CPLocFis?: string;
  CodLocFis?: number;
  TelFijConCli?: string;
  TelCelConCli?: string;
  CarConCli?: string;
  ObsConC?: string;
  [key: string]: any;
}

export interface PropuestaComercialCups {
  CodProComCup: number;
  CodProComCli: number;
  CodPunSum: number;
  CodCup: number;
  CodTar: number;
  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;
  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;
  };
}

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;
  propuesta_comercial_cliente: PropuestaComercialCliente[];
}


export interface CuentaBancaria {
    CodCueBan: number;
    CodCli: number;
    CodBan: string;
    NumIBan: string;
    ObserCuenBan?: string;
    EstCue?: string;
    created_at?: string;
    updated_at?: string;
    created_by?: string;
    updated_by?: string;
    banco?: {
        CodBan: string;
        DesBan: string;
    };
}

export interface ContratoFormData {
    razon_social: string;
    documento_fiscal: string;
    fecha_propuesta: string;
    tipo_contrato: number;
    numero_propuesta: string;
    estatus: string;
    //direccion: string;
    //escalera_planta_puerta: string;
    //localidad: string;
    //provincia: string;
    //codigo_postal: string;
    tarifa: string;
    consumo_kw: string;
    comercializadora: string;
    producto: string;
    anexo: string;
    tipo_precio: string;
    comentarios: string;
    electrico: any[];
    gas: any[];
}
