import type { Metadata } from "next";
import Link from "next/link";
import { notFound } from "next/navigation";
import { PortalFooter, PortalHeader } from "../../PortalChrome";
import "../../portal.css";

export const dynamic = "force-dynamic";
type Capability={codigo:string;nombre:string;es_principal:boolean;fuente:string;verificado_en?:string};
type Service={id:number;slug:string;nombre:string;descripcion_corta?:string;categoria:string;precio:number;moneda:string;plazo_estimado_horas?:number;tipo_cobertura:string;cobertura:{tipo:string;resumen:string;territorios:string[]};url_solicitud:string};
type Profile={uuid:string;nombre_fantasia:string;nombre_notario?:string;direccion:string;telefono?:string;comuna:string;region:string;latitud?:number;longitud?:number;precision_ubicacion:string;ubicacion_verificada:boolean;actualizado_en:string;capacidades:Capability[];contacto_publico:{telefono?:string;correo?:string;sitio_web?:string;horario?:string;fuente?:string;version_fuente?:string;verificado_en?:string};servicios:Service[]};

async function getProfile(uuid:string):Promise<Profile|null>{const base=process.env.INTERNAL_API_BASE_URL||"http://api:8000/api/v1";try{const response=await fetch(`${base}/portal/entidades/${encodeURIComponent(uuid)}`,{cache:"no-store"});if(response.status===404)return null;if(!response.ok)throw new Error();return response.json();}catch{return null}}
function money(value:number){return new Intl.NumberFormat("es-CL",{style:"currency",currency:"CLP",maximumFractionDigits:0}).format(value)}
function safeWebsite(value?:string){if(!value)return null;try{const url=new URL(value);return url.protocol==="https:"?url.toString():null}catch{return null}}

export async function generateMetadata({params}:{params:Promise<{uuid:string}>}):Promise<Metadata>{const {uuid}=await params;const profile=await getProfile(uuid);if(!profile)return{title:"Entidad no encontrada | Documenta"};return{title:{absolute:`${profile.nombre_fantasia} | Documenta`},description:`Servicios disponibles, cobertura y datos públicos de ${profile.nombre_fantasia}.`,alternates:{canonical:`https://documenta.cl/entidades/${uuid.toLowerCase()}`}}}

export default async function EntityProfilePage({params}:{params:Promise<{uuid:string}>}){const {uuid}=await params;const profile=await getProfile(uuid);if(!profile)notFound();const website=safeWebsite(profile.contacto_publico.sitio_web);const sourceDate=profile.contacto_publico.verificado_en||profile.actualizado_en;return <div className="portal-site"><PortalHeader/><main className="entity-profile-page"><div className="portal-container">
  <nav className="entity-breadcrumb" aria-label="Migas de pan"><Link href="/">Inicio</Link><span>/</span><Link href="/buscar">Buscador</Link><span>/</span><b>{profile.nombre_fantasia}</b></nav>
  <header className="entity-profile-hero"><div><div className="entity-capability-tags">{profile.capacidades.map((item)=><span key={item.codigo}>{item.nombre}</span>)}</div><h1>{profile.nombre_fantasia}</h1>{profile.nombre_notario&&<p>{profile.nombre_notario}</p>}<address>{profile.direccion}<br/>{profile.comuna}, {profile.region}</address></div><aside><span>Servicios disponibles</span><strong>{profile.servicios.length}</strong><small>Datos actualizados {new Date(sourceDate).toLocaleDateString("es-CL")}</small></aside></header>
  <div className="entity-profile-grid"><section className="entity-profile-services"><div className="entity-profile-section-heading"><span>OFERTA VIGENTE</span><h2>Servicios disponibles</h2><p>Cada servicio muestra la cobertura declarada por la entidad.</p></div>{profile.servicios.length===0?<div className="finder-empty">Esta entidad no tiene servicios publicables.</div>:<div className="entity-service-list">{profile.servicios.map((service)=><article key={service.id}><div><small>{service.categoria}</small><h3>{service.nombre}</h3><p>{service.descripcion_corta||"Servicio disponible para solicitud en línea."}</p><details><summary>{service.cobertura.resumen}</summary>{service.cobertura.territorios.length?<ul>{service.cobertura.territorios.map((territory)=><li key={territory}>{territory}</li>)}</ul>:<p>La oferta puede solicitarse desde cualquier comuna de Chile.</p>}</details></div><aside><span>Valor</span><strong>{money(service.precio)}</strong>{service.plazo_estimado_horas&&<small>Plazo estimado: {service.plazo_estimado_horas} h</small>}<a className="portal-button portal-button-primary" href={service.url_solicitud}>Solicitar →</a></aside></article>)}</div>}</section>
  <aside className="entity-public-data"><section><span>DATOS PÚBLICOS</span><h2>Contacto</h2><dl><div><dt>Dirección</dt><dd>{profile.direccion}, {profile.comuna}</dd></div>{profile.contacto_publico.telefono&&<div><dt>Teléfono</dt><dd><a href={`tel:${profile.contacto_publico.telefono}`}>{profile.contacto_publico.telefono}</a></dd></div>}{profile.contacto_publico.correo&&<div><dt>Correo</dt><dd><a href={`mailto:${profile.contacto_publico.correo}`}>{profile.contacto_publico.correo}</a></dd></div>}{website&&<div><dt>Sitio web</dt><dd><a href={website} target="_blank" rel="noreferrer">Abrir sitio ↗</a></dd></div>}{profile.contacto_publico.horario&&<div><dt>Horario</dt><dd>{profile.contacto_publico.horario}</dd></div>}</dl></section><section className="entity-source-card"><strong>Fuente y verificación</strong><p>Fuente: {profile.contacto_publico.fuente||"Documenta"}{profile.contacto_publico.version_fuente?` · ${profile.contacto_publico.version_fuente}`:""}</p><p>Ubicación: {profile.precision_ubicacion.toLowerCase().replaceAll("_"," ")}{profile.ubicacion_verificada?" verificada":" pendiente de verificación"}.</p><small>Documenta publica únicamente información institucional asociada a servicios activos.</small></section></aside></div>
  <section className="entity-profile-back"><Link className="portal-button portal-button-secondary" href="/buscar">← Volver al buscador</Link></section>
</div></main><PortalFooter/></div>}
