import React, { useRef } from 'react';
import { Head, router, usePage } from '@inertiajs/react';
import Layout from '../../../Layouts';
import { Badge, Button, Card, Col, Container, Row, Table } from 'react-bootstrap';
import BreadCrumb from '../../../Components/Common/BreadCrumb';
import { useLoading } from '../../../LoadingContext';
import estilosFoco from '../Contratos/Shared/estilosFocoAccesible.module.css';

const ConsultaPunto = () => {
  const { punto } = usePage<any>().props;
  const { showLoading, hideLoading } = useLoading();

  const printRef = useRef<HTMLDivElement>(null);

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

  const handleEdit = () => {
    showLoading();
    router.visit(route('puntos-suministro.edit', punto.CodPunSum), {
      onFinish: () => hideLoading()
    });
  };

  return (
    <React.Fragment>
      <Head title={`Consultando Punto: ${punto?.CodPunSum ?? ''}`} />
      <div className="page-content">
        <Container fluid>
          <BreadCrumb title="Consulta" pageTitle="Punto de Suministro" />
          <Row>
            <Col xl={12}>
              <Card>
                <Card.Header className="d-flex justify-content-between align-items-center bg-light">
                  <h4 className="card-title mb-0">
                    Punto: {punto?.NomViaPunSum || 'Sin nombre'} {punto?.NumViaPunSum || ''}
                  </h4>
                </Card.Header>
                <Card.Body>
                  <div ref={printRef}>
                    {/* Información General */}
                    <div className="mb-4">
                      <h5 className="border-bottom pb-2">Información General</h5>
                      <Row>
                        <Col md={8}>
                          <Table bordered responsive className="table-striped">
                            <tbody>
                              <tr>
                                <th style={{ width: '30%' }}>Cliente</th>
                                <td>{punto?.cliente?.RazSocCli || 'N/A'}</td>
                              </tr>
                              <tr>
                                <th>Estado</th>
                                <td>
                                  {punto?.EstPunSum === 1 ? (
                                    <Badge bg="success">Activo</Badge>
                                  ) : (
                                    <Badge bg="secondary">Suspendido</Badge>
                                  )}
                                </td>
                              </tr>
                              {(punto?.TelPunSum || punto?.ObsPunSum) && (
                                <tr>
                                  <th>Otros</th>
                                  <td>
                                    {punto?.TelPunSum && (
                                      <div>
                                        <strong>Teléfono:</strong> {punto.TelPunSum}
                                      </div>
                                    )}
                                    {punto?.ObsPunSum && (
                                      <div>
                                        <strong>Observaciones:</strong> {punto.ObsPunSum}
                                      </div>
                                    )}
                                  </td>
                                </tr>
                              )}
                            </tbody>
                          </Table>
                        </Col>
                      </Row>
                    </div>

                    {/* Dirección */}
                    <div className="mt-4">
                      <h5 className="border-bottom pb-2">Dirección del Punto</h5>
                      <Row>
                        <Col md={8}>
                          <Table bordered responsive className="table-striped">
                            <tbody>
                              <tr>
                                <th style={{ width: '30%' }}>Vía</th>
                                <td>
                                  {`${punto?.NomViaPunSum ?? ''} ${punto?.NumViaPunSum ?? ''}`.trim() || 'N/A'}
                                </td>
                              </tr>
                              <tr>
                                <th>Detalles</th>
                                <td>
                                  {[
                                    punto?.BloPunSum ? `Bloq: ${punto.BloPunSum}` : '',
                                    punto?.EscPunSum ? `Esc: ${punto.EscPunSum}` : '',
                                    punto?.PlaPunSum ? `Piso: ${punto.PlaPunSum}` : '',
                                    punto?.PuePunSum ? `Puerta: ${punto.PuePunSum}` : '',
                                  ].filter(Boolean).join(' · ') || '—'}
                                </td>
                              </tr>
                              <tr>
                                <th>Código Postal</th>
                                <td>{punto?.CPLocSoc ?? 'N/A'}</td>
                              </tr>
                              <tr>
                                <th>Localidad</th>
                                <td>{punto?.localidad?.DesLoc ?? 'N/A'}</td>
                              </tr>
                              <tr>
                                <th>Provincia</th>
                                <td>{punto?.localidad?.provincia?.DesPro ?? 'N/A'}</td>
                              </tr>
                            </tbody>
                          </Table>
                        </Col>
                      </Row>
                    </div>

                    {/* CUPS Eléctricos */}
                    <div className="mt-4">
                      <h5 className="border-bottom pb-2">CUPS Eléctricos</h5>
                      <Table bordered hover responsive className="table-striped mb-0">
                        <thead>
                          <tr>
                            <th style={{ width: '28%' }}>CUPS</th>
                            <th>Pot. P1</th>
                            <th>Pot. P2</th>
                            <th>Pot. P3</th>
                            <th>Pot. P4</th>
                            <th>Pot. P5</th>
                            <th>Pot. P6</th>
                            <th>Tarifa</th>
                            <th>Estado</th>
                          </tr>
                        </thead>
                        <tbody>
                          {Array.isArray(punto?.cups_electrico ?? punto?.cupsElectrico) &&
                          (punto?.cups_electrico ?? punto?.cupsElectrico).length > 0 ? (
                            (punto?.cups_electrico ?? punto?.cupsElectrico).map((cups: any, idx: number) => (
                              <tr key={`ele-${cups?.CUPsEle ?? idx}`}>
                                <td>{cups?.CUPsEle || '—'}</td>
                                <td>{cups?.PotConP1 ?? '—'}</td>
                                <td>{cups?.PotConP2 ?? '—'}</td>
                                <td>{cups?.PotConP3 ?? '—'}</td>
                                <td>{cups?.PotConP4 ?? '—'}</td>
                                <td>{cups?.PotConP5 ?? '—'}</td>
                                <td>{cups?.PotConP6 ?? '—'}</td>
                                <td>{cups?.tarifaElectrica?.NomTarEle ?? cups?.tarifa_electrica?.NomTarEle ?? '—'}</td>
                                <td>{cups?.EstCUPs === 1 ? 'Activo' : 'Inactivo'}</td>
                              </tr>
                            ))
                          ) : (
                            <tr>
                              <td colSpan={9} className="text-center">No hay CUPS eléctricos</td>
                            </tr>
                          )}
                        </tbody>
                      </Table>
                    </div>

                    {/* CUPS Gas */}
                    <div className="mt-4">
                      <h5 className="border-bottom pb-2">CUPS Gas</h5>
                      <Table bordered hover responsive className="table-striped mb-0">
                        <thead>
                          <tr>
                            <th style={{ width: '28%' }}>CUPS</th>
                            <th>Caudal Diario</th>
                            <th>Caudal Anual</th>
                            <th>Tarifa</th>
                            <th>Estado</th>
                          </tr>
                        </thead>
                        <tbody>
                          {Array.isArray(punto?.cups_gas ?? punto?.cupsGas) &&
                          (punto?.cups_gas ?? punto?.cupsGas).length > 0 ? (
                            (punto?.cups_gas ?? punto?.cupsGas).map((cups: any, idx: number) => (
                              <tr key={`gas-${cups?.CupsGas ?? idx}`}>
                                <td>{cups?.CupsGas || '—'}</td>
                                <td>{cups?.caudaldiario ?? '—'}</td>
                                <td>{cups?.ConAnuCup ?? '—'}</td>
                                <td>{cups?.tarifaGas?.NomTarGas ?? cups?.tarifa_gas?.NomTarGas ?? '—'}</td>
                                <td>{cups?.EstCUPs === 1 ? 'Activo' : 'Inactivo'}</td>
                              </tr>
                            ))
                          ) : (
                            <tr>
                              <td colSpan={5} className="text-center">No hay CUPS de gas</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 puntos de suministro">
                    Volver a Puntos
                  </Button>
                  <Button
                    variant="primary"
                    onClick={handleEdit}
                    aria-label="Editar punto de suministro"
                  >
                    Editar
                  </Button>
                </Card.Footer>
              </Card>
            </Col>
          </Row>
        </Container>
      </div>    
    </React.Fragment>
  );
};

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