"use client";
import {useState} from 'react';
import {FolderOpen,Plus,Copy,LockKeyhole,Archive,Trash2,RotateCcw} from 'lucide-react';
import {Dialog,DialogContent,DialogHeader,DialogTitle,DialogDescription} from './ui/dialog';
import {Field} from './plan-controls';
import {projectStateLabels,type ProjectState,type ProjectSummary} from '@/lib/projects';
export function ProjectManager({currentId,busy,account,list,onOpen,onNew,onBilling,onStateChange,onOpenChange}:{currentId:string;busy:boolean;account:boolean;list:()=>Promise<ProjectSummary[]>;onOpen:(id:string)=>void;onNew:(name:string,copy:boolean)=>void;onBilling:()=>void;onStateChange:(project:ProjectSummary,state:ProjectState)=>Promise<void>;onOpenChange:(open:boolean)=>void}){
 const [open,setOpen]=useState(false),[rows,setRows]=useState<ProjectSummary[]>([]),[loading,setLoading]=useState(false),[error,setError]=useState(''),[name,setName]=useState('Új projekt'),[scope,setScope]=useState<ProjectState>('active'),[pending,setPending]=useState<{row:ProjectSummary;state:ProjectState}|null>(null),[mutating,setMutating]=useState(false),[notice,setNotice]=useState('');
 const disabled=busy||loading||mutating;
 function toggle(value:boolean){if(mutating)return;setOpen(value);onOpenChange(value);if(value){setPending(null);setNotice('');void refresh()}}
 async function refresh(){setLoading(true);setError('');try{setRows(await list())}catch(e){setError(e instanceof Error?e.message:'A projektek nem tölthetők be.')}finally{setLoading(false)}}
 function create(copy:boolean){if(!name.trim()||name.trim().length>120){setError('Adj meg 1–120 karakteres projektnevet.');return}toggle(false);onNew(name.trim(),copy)}
 async function apply(){if(!pending)return;setMutating(true);setError('');try{await onStateChange(pending.row,pending.state);setNotice(pending.state==='active'?'A projekt visszakerült az Aktív listába.':pending.state==='trash'?'A projekt a lomtárba került. Innen bármikor visszaállítható.':'A projekt archiválva.');setPending(null);await refresh()}catch(e){setError(e instanceof Error?e.message:'A művelet nem sikerült.')}finally{setMutating(false)}}
 const visible=rows.filter(r=>(r.state||'active')===scope);
 return <><button className="projects-button" aria-label="Projektek" disabled={busy} onClick={()=>toggle(true)}><FolderOpen/><span>Projektek</span></button><Dialog open={open} onOpenChange={toggle}><DialogContent className="projects-dialog"><DialogHeader><DialogTitle>Projektek</DialogTitle><DialogDescription>{account?'A saját fiókodba mentett terveid.':'A böngészőben mentett terveid.'}</DialogDescription></DialogHeader><div className="project-pricing"><p>Az első projekt ingyenes, további projekt egyszeri <b>3 490 Ft</b>, vagy korlátlan projekt <b>2 490 Ft/hó</b>.</p><button disabled={disabled} onClick={()=>{toggle(false);onBilling()}}>Projekthelyek és fizetés</button></div><form onSubmit={e=>{e.preventDefault();create(false)}}><Field label="Új projekt neve" value={name} onChange={setName}/><div className="project-actions"><button type="submit" className="primary" disabled={disabled}><Plus/> Üres projekt</button><button type="button" disabled={disabled} onClick={()=>create(true)}><Copy/> Jelenlegi terv másolata</button></div></form>
 <div className="project-state-tabs" role="group" aria-label="Projektlisták">{(['active','archived','trash'] as const).map(s=><button key={s} aria-pressed={scope===s} disabled={mutating} onClick={()=>{setScope(s);setPending(null);setError('')}}>{projectStateLabels[s]} ({rows.filter(r=>(r.state||'active')===s).length})</button>)}</div>
 <p className="report-note">{scope==='active'?'Az archivált és lomtárba helyezett projektek megőrzik a projekthelyüket.':scope==='archived'?'Az archivált terv megnyitás előtt visszaállítható az Aktív listába.':'A lomtár tartalma megmarad, nincs automatikus végleges törlés.'} A visszaállítás nem igényel új vásárlást; az előfizetési zárolás továbbra is érvényes.</p>
 {notice&&<p role="status">{notice}</p>}{error&&<div role="alert"><p className="auth-error">{error}</p><button disabled={disabled} onClick={()=>{setPending(null);void refresh()}}>Lista frissítése</button></div>}
 {pending&&<div className="project-state-confirm"><b>{pending.state==='trash'?'Lomtárba helyezés':pending.state==='archived'?'Archiválás':'Visszaállítás'}: {pending.row.name}</b><p>{pending.state==='active'?'A terv ismét az Aktív listán jelenik meg.':`A szerveren mentett változat megmarad és visszaállítható. ${pending.row.id===currentId?'A jelenlegi terv bezárul; mentetlen módosítások esetén előbb mentsd el.':''}${account?(pending.state==='trash'?' A projekt megosztási linkjei véglegesen megszűnnek.':' A projekt megosztási linkjei a visszaállításig szünetelnek.'):''}`}</p><div className="project-actions"><button disabled={mutating} onClick={()=>setPending(null)}>Mégse</button><button className="primary" disabled={disabled} onClick={()=>void apply()}>{mutating?'Folyamatban…':pending.state==='trash'?'Lomtárba helyezem':pending.state==='archived'?'Archiválom':'Visszaállítom'}</button></div></div>}
 {loading?<p role="status">Projektek betöltése…</p>:!visible.length&&!error?<p>{scope==='active'?'Nincs aktív mentett projekt. Hozz létre egyet, vagy állíts vissza egy korábbi tervet.':scope==='archived'?'Nincs archivált projekt.':'A lomtár üres.'}</p>:<div className="project-list">{visible.map(r=><div className="project-entry" key={r.id}><button disabled={disabled||scope!=='active'||!!pending} aria-label={'Projekt megnyitása: '+r.name} onClick={()=>{toggle(false);r.locked?onBilling():onOpen(r.id)}}><span><strong>{r.name}</strong><small>{new Date(r.updatedAt).toLocaleString('hu-HU')}{r.locked?' · Előfizetéssel feloldható':r.id===currentId?' · Jelenlegi projekt':''}</small>{scope!=='active'&&r.stateChangedAt&&<small>{scope==='trash'?'Lomtárba helyezve':'Archiválva'}: {new Date(r.stateChangedAt).toLocaleString('hu-HU')}</small>}</span>{r.locked?<LockKeyhole/>:<FolderOpen/>}</button>{account&&<div className="project-entry-actions">{scope==='active'?<button disabled={disabled||!!pending} aria-label={'Archiválás: '+r.name} onClick={()=>{setError('');setPending({row:r,state:'archived'})}}><Archive/> Archiválás</button>:<button disabled={disabled||!!pending} aria-label={'Visszaállítás: '+r.name} onClick={()=>{setError('');setPending({row:r,state:'active'})}}><RotateCcw/> Visszaállítás</button>}{scope!=='trash'&&<button disabled={disabled||!!pending} aria-label={'Lomtárba: '+r.name} onClick={()=>{setError('');setPending({row:r,state:'trash'})}}><Trash2/> Lomtárba</button>}</div>}</div>)}</div>}</DialogContent></Dialog></>;
}
