import React, { useRef, useState, useEffect } from "react";
import {
    Card,
    Col,
    Container,
    Row, Button, Table, Badge, Accordion, Nav
} from "react-bootstrap";

import BreadCrumb from "../../../../Components/Common/BreadCrumb";
import Swal from "sweetalert2";
import { Head, router } from "@inertiajs/react";
import Layout from "../../../../Layouts";
import 'react-bootstrap-typeahead/css/Typeahead.css';
import { Printer, Download, FileText, Flame, Zap } from "lucide-react";
import { PropuestaComercial } from "../Interfaces/Interfaces";
//import TabNavigator from "../UniClienteMultiPunto/components/TabNavigator";
//import { EmptyState } from "../Edicion/components/EmptyState";
import { useDocumentosTramitados } from "../Edicion/hooks/useDocumentosTramitados";
import { DocumentosTramitadosTable } from "../Edicion/components/DocumentosTramitadosTable";
import { formatCalendarDateEs } from "../../../../utils/serverCalendarDate";

const FormWizard = ({datos}: { datos: PropuestaComercial }) => {
  const [activeKey, setActiveKey] = useState<string>("0");
  const [activeTab, setActiveTab] = useState<'electrico' | 'gas' | 'documentos'>('electrico');
  const printRef = useRef<HTMLDivElement>(null);

  const { descargarDocumento } = useDocumentosTramitados();

  // Imprimir datos recibidos para depuración
  useEffect(() => {
    console.log("Datos recibidos en ConsultaContrato:", datos);
  }, [datos]);

  // Validar si tenemos los datos necesarios
  const hasClienteData = datos && datos.propuesta_comercial_cliente && Array.isArray(datos.propuesta_comercial_cliente);

  // Contar CUPS eléctricos y de gas
  const cupsElectricosCount = datos.propuesta_comercial_cliente?.reduce((count, cliente) =>
    count + cliente.propuesta_comercial_cups.filter(cups => cups.TipCups === 1).length, 0) || 0;
  const cupsGasCount = datos.propuesta_comercial_cliente?.reduce((count, cliente) =>
    count + cliente.propuesta_comercial_cups.filter(cups => cups.TipCups === 2).length, 0) || 0;

  const handlePrint = () => {
    if (printRef.current) {
      const printContents = printRef.current.innerHTML;
      const originalContents = document.body.innerHTML;

      document.body.innerHTML = `
        <html>
          <head>
            <title>Propuesta Comercial ${datos.RefProCom}</title>
            <style>
              body { font-family: Arial, sans-serif; }
              .print-header { text-align: center; margin-bottom: 20px; }
              table { width: 100%; border-collapse: collapse; margin-bottom: 15px; }
              th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
              th { background-color: #f2f2f2; }
              .section-title { margin-top: 20px; margin-bottom: 10px; font-weight: bold; }
              .subsection { margin-left: 20px; }
              .badge {
                display: inline-block;
                padding: 3px 8px;
                border-radius: 4px;
                font-size: 12px;
                font-weight: bold;
                text-align: center;
              }
              .badge-success { background-color: #d4edda; color: #155724; }
              .badge-warning { background-color: #fff3cd; color: #856404; }
              .badge-danger { background-color: #f8d7da; color: #721c24; }
              .badge-info { background-color: #d1ecf1; color: #0c5460; }
              .page-break { page-break-before: always; }
              @media print {
                .page-break { page-break-before: always; }
              }
            </style>
          </head>
          <body>
            <div class="print-header">
              <h2>Propuesta Comercial: ${datos.RefProCom}</h2>
              <p>Fecha: ${formatCalendarDateEs(datos.FecProCom)}</p>
            </div>
            ${printContents}
          </body>
        </html>
      `;

      window.print();
      document.body.innerHTML = originalContents;
    }
  };

  const handleDownloadPDF = () => {
    // Función para descargar como PDF - Se implementaría con una librería como jsPDF
    Swal.fire({
      title: 'Descargando...',
      text: 'La funcionalidad de descarga PDF será implementada próximamente',
      icon: 'info',
      timer: 2000,
      showConfirmButton: false,
    });
  };

  const getEstadoLabel = (estado: string) => {
    switch (estado) {
      case 'P':
        return <Badge bg="warning">Pendiente</Badge>;
      case 'A':
        return <Badge bg="success">Aprobado</Badge>;
      case 'R':
        return <Badge bg="danger">Rechazado</Badge>;
      default:
        return <Badge bg="info">{estado}</Badge>;
    }
  };

  const getTipoContratoLabel = (tipo: number) => {
    switch (tipo) {
      case 1:
        return "Contrato Simple";
      case 2:
        return "Contrato Multi-Punto";
      case 3:
        return "Contrato Multi-Cliente Multi-Punto";
      default:
        return `Tipo ${tipo}`;
    }
  };

  const formatFecha = (fecha: string | undefined) => {
    if (!fecha) return "-";
    return formatCalendarDateEs(fecha);
  };

  return (
    <React.Fragment>
      <Head title={`Consultando Propuesta Comercial: ${datos.RefProCom}`} />
      <div className="page-content">
        <Container fluid>
          <BreadCrumb title="Consulta" pageTitle="Propuesta Comercial" />
          <Row>
            <Col xl={12}>
              <Card>
                <Card.Header className="d-flex justify-content-between align-items-center bg-light">
                  <h4 className="card-title mb-0">Propuesta Comercial: {datos.RefProCom}</h4>
                  <div className="d-flex gap-2">
                    <Button variant="primary" size="sm" onClick={handlePrint}>
                      <Printer size={16} className="me-1" />
                      Imprimir
                    </Button>
                    <Button variant="success" size="sm" onClick={handleDownloadPDF}>
                      <Download size={16} className="me-1" />
                      Descargar PDF
                    </Button>
                  </div>
                </Card.Header>
                <Card.Body>
                  <div ref={printRef}>
                    {/* Información general de la propuesta */}
                    <div className="mb-4">
                      <h5 className="border-bottom pb-2">Información General</h5>
                      <Row>
                        <Col md={6}>
                          <Table bordered responsive className="table-striped">
                            <tbody>
                              <tr>
                                <th style={{ width: "40%" }}>Número de Referencia</th>
                                <td>{datos.RefProCom}</td>
                              </tr>
                              <tr>
                                <th>Fecha de Propuesta</th>
                                <td>{formatFecha(datos.FecProCom)}</td>
                              </tr>
                              <tr>
                                <th>Tipo de Contrato</th>
                                <td>{getTipoContratoLabel(datos.TipProCom)}</td>
                              </tr>
                              <tr>
                                <th>Estado</th>
                                <td>{getEstadoLabel(datos.EstProCom)}</td>
                              </tr>
                              {datos.ObsProCom && (
                                <tr>
                                  <th>Observaciones</th>
                                  <td>{datos.ObsProCom}</td>
                                </tr>
                              )}
                            </tbody>
                          </Table>
                        </Col>
                      </Row>
                    </div>

                    {/* Clientes y sus puntos de suministro */}
                    <div className="mt-5">
                      <h5 className="border-bottom pb-2">Clientes y Puntos de Suministro</h5>

                      {hasClienteData ? (
                        <Accordion defaultActiveKey={activeKey} onSelect={(k) => setActiveKey(k as string)} className="mt-3">
                          {datos.propuesta_comercial_cliente.map((clienteData, clienteIndex) => (
                            <Accordion.Item key={`cliente-${clienteIndex}`} eventKey={clienteIndex.toString()}>
                              <Accordion.Header>
                                <span className="fw-bold">{clienteData?.cliente?.RazSocCli || 'Cliente sin nombre'}</span>
                                <span className="ms-3 text-muted">NIF: {clienteData?.cliente?.NumCifCli || 'N/A'}</span>
                              </Accordion.Header>
                              <Accordion.Body>
                                {/* Datos del cliente */}
                                <div className="mb-4">
                                  <Row>
                                    <Col md={6}>
                                  <h6 className="fw-bold">Información del Cliente</h6>
                                      <Table bordered responsive className="table-striped">
                                        <tbody>
                                          <tr>
                                            <th style={{ width: "40%" }}>Razón Social</th>
                                            <td>{clienteData.cliente?.RazSocCli ?? 'N/A'}</td>
                                          </tr>
                                          <tr>
                                            <th>NIF/CIF</th>
                                            <td>{clienteData.cliente?.NumCifCli ?? 'N/A'}</td>
                                          </tr>
                                          <tr>
                                            <th>Dirección</th>
                                            <td>{clienteData.cliente?.NomViaDomSoc ?? ''} {clienteData.cliente?.NumViaDomSoc ?? ''}</td>
                                          </tr>
                                          <tr>
                                            <th>Código Postal</th>
                                            <td>{clienteData.cliente?.CPLocSoc ?? 'N/A'}</td>
                                          </tr>
                                          <tr>
                                            <th>Teléfono</th>
                                            <td>{clienteData.cliente?.TelFijCli || clienteData.cliente?.TelMovCli || 'N/A'}</td>
                                          </tr>
                                          <tr>
                                            <th>Email</th>
                                            <td>{clienteData.cliente?.EmaCli || 'N/A'}</td>
                                          </tr>
                                        </tbody>
                                      </Table>
                                    </Col>
                                    <Col md={6}>
                                      <h6 className="fw-bold mt-3 mt-md-0">Información de Contacto</h6>
                                      {clienteData.contacto ? (
                                        <Table bordered responsive className="table-striped">
                                          <tbody>
                                            <tr>
                                              <th style={{ width: "40%" }}>Nombre</th>
                                              <td>{clienteData.contacto.NomConCli}</td>
                                            </tr>
                                            <tr>
                                              <th>NIF</th>
                                              <td>{clienteData.contacto.NIFConCli}</td>
                                            </tr>
                                            <tr>
                                              <th>Teléfono</th>
                                              <td>{clienteData.contacto.TelFijConCli || clienteData.contacto.TelCelConCli || 'N/A'}</td>
                                            </tr>
                                            <tr>
                                              <th>Email</th>
                                              <td>{clienteData.contacto.EmaConCli || 'N/A'}</td>
                                            </tr>
                                            <tr>
                                              <th>Cargo</th>
                                              <td>{clienteData.contacto.CarConCli || 'N/A'}</td>
                                            </tr>
                                          </tbody>
                                        </Table>
                                      ) : (
                                        <p>No hay información de contacto disponible</p>
                                      )}
                                    </Col>
                                  </Row>
                                </div>

                                {/* Puntos de suministro con pestañas */}
                                <div className="mt-4">
                                  <h6 className="fw-bold">Puntos de Suministro</h6>

                                  {clienteData.propuesta_comercial_cups && clienteData.propuesta_comercial_cups.length > 0 ? (
                                    <div className="mt-3">
                                      {/* Pestañas */}
                                      <Nav variant="tabs" className="mb-3">
                                        <Nav.Item>
                                          <Nav.Link
                                            active={activeTab === 'electrico'}
                                            onClick={() => setActiveTab('electrico')}
                                            style={{ cursor: 'pointer' }}
                                          >
                                            <Zap size={16} className="me-2" style={{ display: 'inline' }} />
                                            CUPS Eléctricos
                                            {clienteData.propuesta_comercial_cups.filter(cups => cups.TipCups === 1).length > 0 && (
                                              <Badge bg="primary" className="ms-2">
                                                {clienteData.propuesta_comercial_cups.filter(cups => cups.TipCups === 1).length}
                                              </Badge>
                                            )}
                                          </Nav.Link>
                                        </Nav.Item>
                                        <Nav.Item>
                                          <Nav.Link
                                            active={activeTab === 'gas'}
                                            onClick={() => setActiveTab('gas')}
                                            style={{ cursor: 'pointer' }}
                                          >
                                            <Flame size={16} className="me-2" style={{ display: 'inline' }} />
                                            CUPS Gas
                                            {clienteData.propuesta_comercial_cups.filter(cups => cups.TipCups === 2).length > 0 && (
                                              <Badge bg="warning" className="ms-2">
                                                {clienteData.propuesta_comercial_cups.filter(cups => cups.TipCups === 2).length}
                                              </Badge>
                                            )}
                                          </Nav.Link>
                                        </Nav.Item>
                                        <Nav.Item>
                                          <Nav.Link
                                            active={activeTab === 'documentos'}
                                            onClick={() => setActiveTab('documentos')}
                                            style={{ cursor: 'pointer' }}
                                          >
                                            <Download size={16} className="me-2" style={{ display: 'inline' }} />
                                            Documentos Tramitados
                                            {datos.documentos_propuestas.length > 0 && (
                                              <Badge bg="warning" className="ms-2">
                                                {datos.documentos_propuestas.length}
                                              </Badge>
                                            )}
                                          </Nav.Link>
                                        </Nav.Item>
                                      </Nav>

                                      {/* Contenido de pestañas */}
                                      <div className="tab-content">
                                        {/* Tab CUPS Eléctricos */}
                                        {activeTab === 'electrico' && clienteData.propuesta_comercial_cups.filter(cups => cups.TipCups === 1).length > 0 && (
                                          <div className="tab-pane fade show active">
                                            <Table bordered hover responsive className="table-striped mb-0">
                                              <thead>
                                                <tr>
                                                  <th>CUPS</th>
                                                  <th>Dirección</th>
                                                  <th>Tarifa</th>
                                                  <th>Consumo Anual</th>
                                                  <th>Potencias (kW)</th>
                                                  <th>Comercializadora</th>
                                                  <th>Producto</th>
                                                  <th>Anexo</th>
                                                  <th>Vigencia</th>
                                                  <th>N° Contrato Comercializadora</th>
                                                </tr>
                                              </thead>
                                              <tbody>
                                                {clienteData.propuesta_comercial_cups
                                                  .filter(cups => cups.TipCups === 1)
                                                  .map((cups, cupsIndex) => {
                                                    const puntoSuministro = cups.punto_suministro;
                                                    const cupEle = (cups as any)?.CupEle ?? (cups as any)?.cups_electrico;
                                                    if (!cupEle) return null;
                                                    return (
                                                      <tr key={`electrico-${cupEle.CodCupsEle ?? cups.CodProComCup}-${cupsIndex}`}
                                                          className={cups.NrContratoAudax == "0" ? 'bg-warning' : ''}>
                                                        <td>
                                                          <div className="d-flex align-items-center">
                                                            <Zap size={16} className="me-1 text-primary" />
                                                            <span className="fw-medium">{cupEle.CUPsEle || 'N/A'}</span>
                                                          </div>
                                                        </td>
                                                        <td>
                                                          {puntoSuministro ? (
                                                            <>
                                                              {puntoSuministro.NomViaPunSum} {puntoSuministro.NumViaPunSum},
                                                              {puntoSuministro.localidad ? ` ${puntoSuministro.localidad.DesLoc}` : ''}
                                                              {puntoSuministro.CPLocSoc ? ` (${puntoSuministro.CPLocSoc})` : ''}
                                                            </>
                                                          ) : 'N/A'}
                                                        </td>
                                                        <td>{(cups as any)?.tarifa_electrica?.NomTarEle ?? (cups as any)?.tarifaElectrica?.NomTarEle ?? 'N/A'}</td>
                                                        <td>{cupEle.ConAnuCup || (cups as any).ConCup || 'N/A'} kWh</td>
                                                        <td>
                                                          <div className="d-flex gap-1">
                                                            {cups.PotEleConP1 && <small><strong>P1:</strong> {cups.PotEleConP1} kW</small>}
                                                            {cups.PotEleConP2 && <small><strong>P2:</strong> {cups.PotEleConP2} kW</small>}
                                                            {cups.PotEleConP3 && <small><strong>P3:</strong> {cups.PotEleConP3} kW</small>}
                                                            {cups.PotEleConP4 && <small><strong>P4:</strong> {cups.PotEleConP4} kW</small>}
                                                            {cups.PotEleConP5 && <small><strong>P5:</strong> {cups.PotEleConP5} kW</small>}
                                                            {cups.PotEleConP6 && <small><strong>P6:</strong> {cups.PotEleConP6} kW</small>}
                                                            {!cups.PotEleConP1 && !cups.PotEleConP2 && !cups.PotEleConP3 &&
                                                             !cups.PotEleConP4 && !cups.PotEleConP5 && !cups.PotEleConP6 && 'N/A'}
                                                          </div>
                                                        </td>
                                                        <td>{cups.comercializadora?.RazSocCom || 'N/A'}</td>
                                                        <td>{cups.producto?.DesPro || 'N/A'}</td>
                                                        <td>{cups.anexo_producto?.DesAnePro || 'N/A'}</td>
                                                        <td>
                                                          {formatFecha(cups.FecActCUPs)} - {formatFecha(cups.FecVenCUPs)}
                                                        </td>
                                                        <td>
                                                          <div className="d-flex align-items-center justify-content-center">
                                                            <span className="text-black">{cups.NrContratoAudax}</span>
                                                          </div>
                                                        </td>
                                                      </tr>
                                                    );
                                                  })}
                                              </tbody>
                                            </Table>
                                          </div>
                                        )}

                                        {/* Tab CUPS Gas */}
                                        {activeTab === 'gas' && clienteData.propuesta_comercial_cups.filter(cups => cups.TipCups === 2).length > 0 && (
                                          <div className="tab-pane fade show active">
                                            <Table bordered hover responsive className="table-striped mb-0">
                                              <thead>
                                                <tr>
                                                  <th>CUPS</th>
                                                  <th>Dirección</th>
                                                  <th>Tarifa</th>
                                                  <th>Consumo Anual</th>
                                                  <th>Comercializadora</th>
                                                  <th>Producto</th>
                                                  <th>Anexo</th>
                                                  <th>Vigencia</th>
                                                  <th>N° Contrato Comercializadora</th>
                                                </tr>
                                              </thead>
                                              <tbody>
                                                {clienteData.propuesta_comercial_cups
                                                  .filter(cups => cups.TipCups === 2)
                                                  .map((cups, cupsIndex) => {
                                                    const puntoSuministro = cups.punto_suministro;
                                                    const cupGas = (cups as any)?.CupGas ?? (cups as any)?.cups_gas;
                                                    if (!cupGas) return null;
                                                    return (
                                                      <tr key={`gas-${cupGas.CodCupsGas ?? cups.CodProComCup}-${cupsIndex}`}
                                                          className={cups.NrContratoAudax == "0" ? 'bg-warning' : ''}>
                                                        <td>
                                                          <div className="d-flex align-items-center">
                                                            <Flame size={16} className="me-1 text-warning" />
                                                            <span className="fw-medium">{cupGas.CupsGas || 'N/A'}</span>
                                                          </div>
                                                        </td>
                                                        <td>
                                                          {puntoSuministro ? (
                                                            <>
                                                              {puntoSuministro.NomViaPunSum} {puntoSuministro.NumViaPunSum},
                                                              {puntoSuministro.localidad ? ` ${puntoSuministro.localidad.DesLoc}` : ''}
                                                              {puntoSuministro.CPLocSoc ? ` (${puntoSuministro.CPLocSoc})` : ''}
                                                            </>
                                                          ) : 'N/A'}
                                                        </td>
                                                        <td>{(cups as any)?.tarifa_gas?.NomTarGas ?? (cups as any)?.tarifa_gas?.DesTarGas ?? (cups as any)?.tarifaGas?.NomTarGas ?? (cups as any)?.tarifaGas?.DesTarGas ?? 'N/A'}</td>
                                                        <td>{cupGas.ConAnuCup || cups.ConCup || 'N/A'} m³</td>
                                                        <td>{cups.comercializadora?.RazSocCom || 'N/A'}</td>
                                                        <td>{cups.producto?.DesPro || 'N/A'}</td>
                                                        <td>{cups.anexo_producto?.DesAnePro || 'N/A'}</td>
                                                        <td>
                                                          {formatFecha(cups.FecActCUPs)} - {formatFecha(cups.FecVenCUPs)}
                                                        </td>
                                                        <td>
                                                          <div className="d-flex align-items-center justify-content-center">
                                                            <span className="text-black">{cups.NrContratoAudax}</span>
                                                          </div>
                                                        </td>
                                                      </tr>
                                                    );
                                                  })}
                                              </tbody>
                                            </Table>
                                          </div>
                                        )}

                                        {/* Tab CUPS Gas */}
                                        {activeTab === 'documentos' && datos.documentos_propuestas.length > 0 && (
                                          <div className="tab-pane fade show active">
                                            {/* Aqui va la tabla de documentos */}
                                                <h6 className="fw-bold mb-3">
                                                <FileText size={18} className="me-2" style={{ display: 'inline' }} />
                                                Documentos del Contrato
                                                </h6>
                                                <DocumentosTramitadosTable
                                                documentos={datos.documentos_propuestas}
                                                onDescargar={descargarDocumento}
                                                />
                                          </div>
                                        )}

                                        {/* Mensajes de vacío para cada tab */}
                                        {activeTab === 'electrico' && clienteData.propuesta_comercial_cups.filter(cups => cups.TipCups === 1).length === 0 && (
                                          <div className="alert alert-info">
                                            <div className="d-flex align-items-center">
                                              <Zap size={24} className="me-2 text-primary" />
                                              <div>
                                                <h6 className="mb-0">No hay CUPS eléctricos</h6>
                                                <small>No se encontraron suministros eléctricos para este cliente</small>
                                              </div>
                                            </div>
                                          </div>
                                        )}
                                        {activeTab === 'gas' && clienteData.propuesta_comercial_cups.filter(cups => cups.TipCups === 2).length === 0 && (
                                          <div className="alert alert-info">
                                            <div className="d-flex align-items-center">
                                              <Flame size={24} className="me-2 text-warning" />
                                              <div>
                                                <h6 className="mb-0">No hay CUPS de gas</h6>
                                                <small>No se encontraron suministros de gas para este cliente</small>
                                              </div>
                                            </div>
                                          </div>
                                        )}

                                        {activeTab === 'documentos' && datos.documentos_propuestas.length === 0 && (
                                          <div className="alert alert-info">
                                            <div className="d-flex align-items-center">
                                              <Download size={24} className="me-2 text-warning" />
                                              <div>
                                                <h6 className="mb-0">Sin Documentos Tramitados</h6>
                                                <small>No existen documentos para este contrato</small>
                                              </div>
                                            </div>
                                          </div>
                                        )}


                                      </div>
                                    </div>
                                  ) : (
                                    <p>No hay puntos de suministro registrados para este cliente</p>
                                  )}
                                </div>
                              </Accordion.Body>
                            </Accordion.Item>
                          ))}
                        </Accordion>
                      ) : (
                        <p>No hay información de clientes disponible</p>
                      )}
                    </div>
                  </div>
                </Card.Body>
                <Card.Footer className="text-center">
                  <Button
                    variant="secondary"
                    onClick={() => router.visit(route('contratos.index'))}
                    className="me-2"
                  >
                    <FileText size={16} className="me-1" />
                    Volver a Contratos
                  </Button>
                </Card.Footer>
              </Card>
            </Col>
          </Row>
        </Container>
      </div>
    </React.Fragment>
  );
};

FormWizard.layout = (page: any) => <Layout children={page} />;
export default FormWizard;
