"use client";
import {useState} from 'react';
import {FileDown} from 'lucide-react';
import {Dialog,DialogContent,DialogHeader,DialogTitle,DialogDescription} from '@/components/ui/dialog';
import {Choice} from './plan-controls';
import {validatePlan,Plan} from '@/lib/plan';
import type {PdfOptions} from '@/lib/pdf-export';
import {backgroundData} from '@/lib/background-client';
import {toast} from 'sonner';
export function PdfDialog({plan,buildingId,boardId='',floorId,view,requireAccess,note,sizingOption=true}:{requireAccess:()=>Promise<boolean>;plan:Plan;buildingId:string;boardId?:string;floorId:string;view:string;note?:string;sizingOption?:boolean}){const[open,setOpen]=useState(false),[scope,setScope]=useState<PdfOptions['scope']>('all'),[paper,setPaper]=useState<PdfOptions['paper']>('a4'),[busy,setBusy]=useState(false);const[sizing,setSizing]=useState('no');
 async function generate(){setBusy(true);try{if(!await requireAccess()){setOpen(false);return}const snapshot=validatePlan(plan);const response=await fetch('/fonts/NotoSans-Regular.ttf');if(!response.ok)throw Error('A PDF betűkészlete nem tölthető be. Próbáld újra.');const bytes=new Uint8Array(await response.arrayBuffer());let binary='';for(let i=0;i<bytes.length;i+=8192)binary+=String.fromCharCode(...bytes.subarray(i,i+8192));const{createPlanPdf}=await import('@/lib/pdf-export');const floors=scope==='all'?snapshot.buildings.flatMap(b=>b.floors):scope==='floor'?snapshot.buildings.find(b=>b.id===buildingId)?.floors.filter(f=>f.id===floorId)||[]:[];const images=await backgroundData(floors.flatMap(f=>f.background?.visible?[f.background.assetId]:[]));const pdf=createPlanPdf(snapshot,{scope,paper,buildingId,floorId,boardId,sizing:sizingOption&&sizing==='yes'&&(scope==='board'||scope==='all')},btoa(binary),images);const names={floor:'alaprajz',plot:'telek',board:'eloszto',all:'teljes-tervdokumentacio',single:'egyvonalas',multi:'tobbvonalas'};pdf.save('Villanyrajz-'+names[scope]+'.pdf');toast.success('A PDF elkészült: '+pdf.getNumberOfPages()+' oldal.');setOpen(false)}catch(e){toast.error(e instanceof Error?e.message:'A PDF nem készíthető el.')}finally{setBusy(false)}}
 return <><button className="pdf-button" aria-label="PDF / nyomtatás" title="PDF / nyomtatás" onClick={async()=>{if(!await requireAccess())return;setScope(view==='single'||view==='multi'?view:view==='plan'?'floor':view==='plot'?'plot':'board');setOpen(true)}}><FileDown/><span>PDF / nyomtatás</span></button><Dialog open={open} onOpenChange={o=>{if(!busy)setOpen(o)}}><DialogContent><DialogHeader><DialogTitle>Nyomtatható tervdokumentáció</DialogTitle><DialogDescription>{note??'Az ingyenes és a megvásárolt projekt előfizetés nélkül, az előfizetéses projektek aktív előfizetéssel exportálhatók. A PDF az aktuális szerkesztett tervből készül, világos háttérrel, méretaránnyal és jegyzékekkel.'}</DialogDescription></DialogHeader><Choice label="PDF tartalma" value={scope} onChange={v=>setScope(v as PdfOptions['scope'])} items={[["floor","Aktuális szint alaprajza"],["plot","Telek és telki hálózat"],["board","Kiválasztott elosztó"],["single","Kiválasztott elosztó egyvonalas rajza"],["multi","Kiválasztott elosztó többvonalas rajza"],["all","Minden terv és kapcsolási rajz egy PDF-ben"]]}/><Choice label="Papírméret" value={paper} onChange={v=>setPaper(v as PdfOptions['paper'])} items={[["a4","A4 fekvő"],["a3","A3 fekvő"]]}/>{sizingOption&&(scope==='board'||scope==='all')&&<Choice label="Méretezési segédszámítás" value={sizing} onChange={setSizing} items={[["no","Ne kerüljön a PDF-be"],["yes","Kerüljön az elosztóoldalakra (tájékoztató, a tervező ellenőrzi)"]]}/>}<p>Nyomtatáskor a „Tényleges méret” vagy 100% beállítást válaszd a feltüntetett méretarányhoz. A PDF-ből bármely oldal külön is nyomtatható.</p><button className="primary" disabled={busy} onClick={()=>void generate()}><FileDown/>{busy?'PDF készítése…':'PDF letöltése'}</button></DialogContent></Dialog></>}
