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

import { Head, router } from "@inertiajs/react";
import 'react-bootstrap-typeahead/css/Typeahead.css';
import { FileText } from "lucide-react";
import { Cliente } from "../../../interfaces";
import BreadCrumb from "../../../Components/Common/BreadCrumb";
import Layout from "../../../Layouts";
import { useLoading } from '../../../LoadingContext';
import estilosFoco from '../Contratos/Shared/estilosFocoAccesible.module.css';

const ConsultaCliente = ({cliente}: { cliente: Cliente }) => {
  const [activeKey, setActiveKey] = useState<string>("0");
  const printRef = useRef<HTMLDivElement>(null);
  const { showLoading, hideLoading } = useLoading();

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

  const handleBack = () => {
    showLoading();
    router.visit(route('clientes.index'), {
      onFinish: () => hideLoading()
    });
  };

  const handleEdit = () => {
    showLoading();
    router.visit(route('clientes.editar', cliente.CodCli), {
      onFinish: () => hideLoading()
    });
  };


  return (
    <React.Fragment>
      <Head title={`Consultando Cliente: ${cliente.CodCli}`} />
      <div className="page-content">
        <Container fluid>
          <BreadCrumb title="Consulta" pageTitle="Cliente" />
          <Row>
            <Col xl={12}>
              <Card>
                <Card.Header className="d-flex justify-content-between align-items-center bg-light">
                  <h4 className="card-title mb-0">
                    Cliente: {cliente.RazSocCli || "Sin nombre"}
                  </h4>
                </Card.Header>
                <Card.Body>
                  {/* Contenido imprimible si se necesitara más adelante */}
                  <div ref={printRef}>
                    {/* Información general */}
                    <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%" }}>Razón Social</th>
                                <td>{cliente.RazSocCli ?? "N/A"}</td>
                              </tr>
                              <tr>
                                <th>Nombre Comercial</th>
                                <td>{cliente.NomComCli ?? "N/A"}</td>
                              </tr>
                              <tr>
                                <th>NIF/CIF</th>
                                <td>{cliente.NumCifCli ?? "N/A"}</td>
                              </tr>
                              <tr>
                                <th>Estado</th>
                                <td>
                                  {cliente as any && (cliente as any).EstCli === 1 ? (
                                    <Badge bg="success">Activo</Badge>
                                  ) : (
                                    <Badge bg="secondary">Suspendido</Badge>
                                  )}
                                </td>
                              </tr>
                              {((cliente as any)?.WebCli || (cliente as any)?.ObsCli) && (
                                <tr>
                                  <th>Otros</th>
                                  <td>
                                    {(cliente as any)?.WebCli && (
                                      <div>
                                        <strong>Web:</strong> {(cliente as any).WebCli}
                                      </div>
                                    )}
                                    {(cliente as any)?.ObsCli && (
                                      <div>
                                        <strong>Observaciones:</strong> {(cliente as any).ObsCli}
                                      </div>
                                    )}
                                  </td>
                                </tr>
                              )}
                            </tbody>
                          </Table>
                        </Col>
                      </Row>
                    </div>

                    {/* Dirección Fiscal */}
                    <div className="mt-4">
                      <h5 className="border-bottom pb-2">Dirección Fiscal</h5>
                      <Row>
                        <Col md={8}>
                          <Table bordered responsive className="table-striped">
                            <tbody>
                              <tr>
                                <th style={{ width: "30%" }}>Vía</th>
                                <td>
                                  {(() => {
                                    const tipoVia = (cliente as any)?.tipoViaFisica || (cliente as any)?.tipo_via_fisica;
                                    const via = tipoVia?.DesTipVia ? `${tipoVia.DesTipVia}` : "";
                                    const nom = (cliente as any)?.NomViaDomFis || "";
                                    const num = (cliente as any)?.NumViaDomFis || "";
                                    return `${via}${via && (nom || num) ? " " : ""}${nom} ${num}`.trim() || "N/A";
                                  })()}
                                </td>
                              </tr>
                              <tr>
                                <th>Código Postal</th>
                                <td>{(cliente as any)?.CPLocFis ?? "N/A"}</td>
                              </tr>
                              <tr>
                                <th>Localidad</th>
                                <td>{(cliente as any)?.localidad?.DesLoc ?? "N/A"}</td>
                              </tr>
                              <tr>
                                <th>Provincia</th>
                                <td>{(cliente as any)?.localidad?.provincia?.DesPro ?? "N/A"}</td>
                              </tr>
                            </tbody>
                          </Table>
                        </Col>
                      </Row>
                    </div>

                    {/* Dirección Social (si hay datos) */}
                    {((cliente as any)?.NomViaDomSoc || (cliente as any)?.CPLocSoc) && (
                      <div className="mt-4">
                        <h5 className="border-bottom pb-2">Domicilio Social</h5>
                        <Row>
                          <Col md={8}>
                            <Table bordered responsive className="table-striped">
                              <tbody>
                                <tr>
                                  <th style={{ width: "30%" }}>Dirección</th>
                                  <td>
                                    {`${(cliente as any)?.NomViaDomSoc ?? ""} ${(cliente as any)?.NumViaDomSoc ?? ""}`.trim() || "N/A"}
                                  </td>
                                </tr>
                                <tr>
                                  <th>Código Postal</th>
                                  <td>{(cliente as any)?.CPLocSoc ?? "N/A"}</td>
                                </tr>
                              </tbody>
                            </Table>
                          </Col>
                        </Row>
                      </div>
                    )}

                    {/* Medios de contacto */}
                    <div className="mt-4">
                      <h5 className="border-bottom pb-2">Contacto</h5>
                      <Row>
                        {/* Contacto principal si existe */}
                        {(cliente as any)?.contacto && (
                          <Col md={6} className="mt-3 mt-md-0">
                            <h6 className="fw-bold">Contacto principal</h6>
                            <Table bordered responsive className="table-striped">
                              <tbody>
                                <tr>
                                  <th style={{ width: "40%" }}>Nombre</th>
                                  <td>{(cliente as any)?.contacto?.NomConCli ?? "N/A"}</td>
                                </tr>
                                <tr>
                                  <th>NIF</th>
                                  <td>{(cliente as any)?.contacto?.NIFConCli ?? "N/A"}</td>
                                </tr>
                                <tr>
                                  <th>Teléfono</th>
                                  <td>
                                    {(cliente as any)?.contacto?.TelFijConCli ||
                                      (cliente as any)?.contacto?.TelCelConCli ||
                                      "N/A"}
                                  </td>
                                </tr>
                                <tr>
                                  <th>Email</th>
                                  <td>{(cliente as any)?.contacto?.EmaConCli ?? "N/A"}</td>
                                </tr>
                                <tr>
                                  <th>Cargo</th>
                                  <td>{(cliente as any)?.contacto?.CarConCli ?? "N/A"}</td>
                                </tr>
                              </tbody>
                            </Table>
                          </Col>
                        )}
                      </Row>
                    </div>

                    {/* Cuentas Bancarias Activas */}
                    {(((cliente as any)?.cuentasBancariasActivas && Array.isArray((cliente as any).cuentasBancariasActivas) && (cliente as any).cuentasBancariasActivas.length > 0) ||
                      ((cliente as any)?.cuentas_bancarias_activas && Array.isArray((cliente as any).cuentas_bancarias_activas) && (cliente as any).cuentas_bancarias_activas.length > 0)) && (
                      <div className="mt-4">
                        <h5 className="border-bottom pb-2">Cuentas Bancarias Activas</h5>
                        <Table bordered hover responsive className="table-striped mb-0">
                          <thead>
                            <tr>
                              <th style={{ width: "40%" }}>IBAN</th>
                              <th>Banco</th>
                              <th>Observaciones</th>
                            </tr>
                          </thead>
                          <tbody>
                            {(
                              ((cliente as any).cuentasBancariasActivas as any[]) ||
                              ((cliente as any).cuentas_bancarias_activas as any[])
                            ).map((cue: any, idx: number) => (
                              <tr key={`cue-${cue?.CodCueBan ?? idx}`}>
                                <td>{cue?.NumIBan ?? "N/A"}</td>
                                <td>{cue?.banco?.DesBan || "S/E"}</td>
                                <td>{cue?.ObserCuenBan ?? "-"}</td>
                              </tr>
                            ))}
                          </tbody>
                        </Table>
                      </div>
                    )}
                  </div>
                </Card.Body>
                <Card.Footer className={`text-center ${estilosFoco.contenedorAccesibleContratos}`}>
                  <Button
                    variant="secondary"
                    onClick={handleBack}
                    className="me-2"
                    aria-label="Volver al listado de clientes"
                  >
                    <FileText size={16} className="me-1" />
                    Volver a Clientes
                  </Button>
                  <Button
                    variant="primary"
                    onClick={handleEdit}
                    aria-label={`Editar cliente ${cliente.RazSocCli || cliente.CodCli}`}
                  >
                    Editar
                  </Button>
                </Card.Footer>
              </Card>
            </Col>
          </Row>
        </Container>
      </div>
    </React.Fragment>
  );
};

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