import React, { useRef, useEffect } 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 { Eye } from 'lucide-react';
import { formatCalendarDateEs } from '../../../../utils/serverCalendarDate';

interface LeadFicha { id: number; abreviacion_caes?: string|null; caes?: string|null; version?: string|null; seleccionado?: boolean|number|null; }
interface LeadActuacion { id: number; sector?: number|null; tipo_actuacion?: number|null; desde?: string|null; hasta?: string|null; nombreProyecto?: string|null; fichas?: LeadFicha[]; }
interface LeadDireccion { id: number; direccion: string; codigo_postal: string; provincia: string; localidad?: string|null; actuaciones?: LeadActuacion[]; }
interface LeadRecord { CodCli: number; RazSocCli?: string|null; NomComCli?: string|null; NumCifCli?: string|null; tipo_caes?: any; direcciones?: LeadDireccion[]; }

const ConsultaCaes: React.FC = () => {
  const { lead } = usePage<any>().props;
  const printRef = useRef<HTMLDivElement>(null);

  useEffect(() => { console.log('Datos recibidos en ConsultaCaes:', lead); }, [lead]);

  const totalDirecciones = (lead?.direcciones||[]).length;
  const totalActuaciones = (lead?.direcciones||[]).reduce((acc: number, d: LeadDireccion) => acc + (d.actuaciones?.length||0),0);
  const totalFichas = (lead?.direcciones||[]).reduce((acc: number, d: LeadDireccion) => acc + (d.actuaciones||[]).reduce((a,b)=> a + (b.fichas?.length||0),0),0);

  return (
    <React.Fragment>
      <Head title={`Consultando CAE: ${lead?.data?.NomComCli ?? ''}`} />
      <div className="page-content">
        <Container fluid>
          <BreadCrumb title="Consulta" pageTitle="CAE" />
          <Row>
            <Col xl={12}>
              <Card>
                <Card.Header className="d-flex justify-content-between align-items-center bg-light">
                  <h4 className="card-title mb-0">Ahorrista CAES: {lead?.data?.NomComCli}</h4>
                  <div className="d-flex gap-2 align-items-center small">
                    <span className="badge badge-soft-primary">Direcciones: {totalDirecciones}</span>
                    <span className="badge badge-soft-success">Actuaciones: {totalActuaciones}</span>
                    <span className="badge badge-soft-info">Fichas: {totalFichas}</span>
                  </div>
                </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={6}>
                          <Table bordered responsive className="table-striped">
                            <tbody>
                              <tr>
                                <th style={{width:'35%'}}>Razón Social</th>
                                <td>{lead?.data?.RazSocCli ?? 'N/A'}</td>
                              </tr>
                              <tr>
                                <th>Nombre Comercial</th>
                                <td>{lead?.data?.NomComCli ?? 'N/A'}</td>
                              </tr>
                              <tr>
                                <th>NIF/CIF</th>
                                <td>{lead?.data?.NumCifCli ?? 'N/A'}</td>
                              </tr>
                            </tbody>
                          </Table>
                        </Col>
                      </Row>
                    </div>

                    {/* Direcciones con actuaciones y fichas */}
                    <div className="mt-4">
                      <h5 className="border-bottom pb-2">Direcciones y Actuaciones</h5>
                      {(lead?.direcciones||[]).map((dir: LeadDireccion, idxDir: number) => {
                        const actCount = dir.actuaciones?.length || 0;
                        const fichasCount = (dir.actuaciones||[]).reduce((a,b)=> a + (b.fichas?.length||0),0);
                        return (
                          <Card key={`dir-${dir.id}`} className="mb-3 border rounded shadow-sm">
                            <Card.Header className="py-2 d-flex justify-content-between align-items-center" style={{background:'rgba(0,0,0,0.03)'}}>
                              <div>
                                <strong>Dirección {idxDir+1}:</strong> {dir.direccion}
                                <span className="ms-2 text-muted small">CP {dir.codigo_postal} · {dir.provincia}</span>
                              </div>
                              <div className="d-flex gap-2 small">
                                <span className="badge badge-soft-success">Act: {actCount}</span>
                                <span className="badge badge-soft-info">Fichas: {fichasCount}</span>
                              </div>
                            </Card.Header>
                            <Card.Body className="pt-2">
                              {(dir.actuaciones||[]).length === 0 && <div className="text-muted small">Sin actuaciones</div>}
                              {(dir.actuaciones||[]).map((act: LeadActuacion, idxAct: number) => (
                                <div key={`act-${act.id}`} className="mb-3 border-start ps-3">
                                  <div className="d-flex justify-content-between align-items-center mb-1">
                                    <h6 className="mb-0">Actuación {idxAct+1}: {act.nombreProyecto || 'Sin nombre'}</h6>
                                    <div className="small text-muted">{act.desde ? formatCalendarDateEs(act.desde) : ''} {act.hasta ? ' - '+ formatCalendarDateEs(act.hasta) : ''}</div>
                                  </div>
                                  {/* Tabla de fichas */}
                                  <Table bordered size="sm" responsive className="table-striped mb-1">
                                    <thead>
                                      <tr>
                                        <th style={{width:'22%'}}>Abreviación</th>
                                        <th>CAE</th>
                                        <th style={{width:'15%'}}>Versión</th>
                                        <th style={{width:'12%'}}>Seleccionado</th>
                                      </tr>
                                    </thead>
                                    <tbody>
                                      {(act.fichas||[]).length > 0 ? (
                                        (act.fichas||[]).map((fi: LeadFicha) => (
                                          <tr key={`ficha-${fi.id}`}>
                                            <td>{fi.abreviacion_caes || '—'}</td>
                                            <td>{fi.caes || '—'}</td>
                                            <td>{fi.version || '—'}</td>
                                            <td>{fi.seleccionado ? <Badge bg="success">Sí</Badge> : <Badge bg="secondary">No</Badge>}</td>
                                          </tr>
                                        ))
                                      ) : (
                                        <tr><td colSpan={4} className="text-center text-muted">Sin fichas</td></tr>
                                      )}
                                    </tbody>
                                  </Table>
                                </div>
                              ))}
                            </Card.Body>
                          </Card>
                        );
                      })}
                    </div>
                  </div>
                </Card.Body>
                <Card.Footer className="text-center">
                  <Button variant="secondary" onClick={() => router.visit(route('caes.index'))} className="me-2">Volver a CAES</Button>
                </Card.Footer>
              </Card>
            </Col>
          </Row>
        </Container>
      </div>
    </React.Fragment>
  );
};

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