import { PanelShell } from "@/components/panel-shell";
import { requirePlatformAccess } from "@/lib/auth";
import { db } from "@/lib/db";
import { createPlan,updatePlan,saveAddonModule } from "@/lib/admin-actions";

const labels:Record<string,string>={products:"Limite de produtos",services:"Limite de serviços",users:"Limite de usuários",custom_domain:"Domínios próprios"};
const messages:Record<string,string>={criado:"Plano cadastrado com sucesso.",alterado:"Plano atualizado com sucesso."};
const errors:Record<string,string>={"codigo-existente":"Esse código já pertence a outro plano. Escolha um código diferente, por exemplo: PREMIUM."};

export default async function Plans({searchParams}:{searchParams:Promise<{plano?:string;erro?:string}>}){
  await requirePlatformAccess(["SUPER_ADMIN","ADMIN","FINANCE"]);
  const [plans,modules]=await Promise.all([db.plan.findMany({include:{features:true,_count:{select:{subscriptions:true}}},orderBy:{priceCents:"asc"}}),db.addonModule.findMany({orderBy:{priceCents:"asc"}})]);
  const query=await searchParams;
  return <PanelShell eyebrow="ADMINISTRAÇÃO" title="Preços e módulos" admin activePath="/admin/planos">
    {query.plano&&messages[query.plano]&&<div className="form-card form-feedback success"><strong>{messages[query.plano]}</strong></div>}
    {query.erro&&errors[query.erro]&&<div className="form-card form-feedback error"><strong>Não foi possível cadastrar.</strong><span>{errors[query.erro]}</span></div>}
    <article className="form-card"><h2>Cadastrar novo plano</h2><form action={createPlan} className="form-stack"><div className="form-grid two"><label>Código<input name="code" placeholder="Ex.: PREMIUM" pattern="[A-Za-z0-9 _-]{2,30}" title="Use letras, números, espaços, hífen ou sublinhado" required/><small>Identificador único do plano. Não pode repetir.</small></label><label>Nome<input name="name" placeholder="Ex.: Premium" required/></label><label>Preço mensal (R$)<input name="price" inputMode="decimal" placeholder="129,90" required/></label><label>Taxa de adesão (R$)<input name="setupFee" inputMode="decimal" defaultValue="290,00" required/><small>Inclui a configuração de domínio personalizado.</small></label><label className="check-line"><input name="active" type="checkbox" defaultChecked/> Disponível para contratação</label>{Object.entries(labels).map(([key,label])=><label key={key}>{label}<input name={key} type="number" min="0" placeholder="Vazio = ilimitado"/></label>)}</div><button className="button">Cadastrar plano <span>→</span></button></form></article>
    <div className="module-toolbar"><p>{plans.length} plano(s) cadastrado(s)</p></div>
    <div className="plan-admin-grid">{plans.map(p=>{const limits=Object.fromEntries(p.features.map(f=>[f.key,f.limit]));return <article className="form-card" key={p.id}><div className="card-head"><div><p className="eyebrow">{p.code}</p><h2>{p.name}</h2><small>R$ {(p.priceCents/100).toFixed(2).replace(".",",")} · {p._count.subscriptions} assinatura(s)</small></div><span className={`pill ${p.active?"active":""}`}>{p.active?"Disponível":"Inativo"}</span></div><div className="plan-limit-summary"><span>{limits.products??"∞"} produtos</span><span>{limits.services??"∞"} serviços</span><span>{limits.users??"∞"} usuários</span></div><details className="plan-editor"><summary>Editar plano</summary><form action={updatePlan} className="form-stack"><input type="hidden" name="planId" value={p.id}/><div className="form-grid two"><label>Nome<input name="name" defaultValue={p.name} required/></label><label>Preço mensal<input name="price" defaultValue={(p.priceCents/100).toFixed(2).replace(".",",")} required/></label><label>Taxa de adesão<input name="setupFee" defaultValue={(p.setupFeeCents/100).toFixed(2).replace(".",",")} required/></label>{Object.entries(labels).map(([key,label])=><label key={key}>{label}<input name={key} type="number" min="0" defaultValue={limits[key]??""} placeholder="Vazio = ilimitado"/></label>)}<label className="check-line"><input name="active" type="checkbox" defaultChecked={p.active}/> Disponível para contratação</label></div><button className="button">Salvar alterações <span>→</span></button></form></details></article>})}</div>
    <article className="form-card"><h2>Módulos adicionais</h2><p>Cadastre novos recursos e ajuste o valor mensal de itens como Delivery sempre que precisar.</p><form action={saveAddonModule} className="form-stack"><div className="form-grid two"><label>Código<input name="code" placeholder="Ex.: AGENDA" required/></label><label>Nome<input name="name" required/></label><label>Preço mensal (R$)<input name="price" defaultValue="0,00" required/></label><label>Descrição<input name="description" required/></label><label className="check-line"><input name="active" type="checkbox" defaultChecked/> Disponível</label><label className="check-line"><input name="future" type="checkbox"/> Implementação futura</label></div><button className="button">Cadastrar módulo <span>→</span></button></form><div className="catalog-table">{modules.map(module=><details className="plan-editor" key={module.id}><summary>{module.name} · R$ {(module.priceCents/100).toFixed(2).replace(".",",")}/mês</summary><form action={saveAddonModule} className="form-stack"><div className="form-grid two"><label>Código<input name="code" defaultValue={module.code} readOnly/></label><label>Nome<input name="name" defaultValue={module.name} required/></label><label>Preço mensal (R$)<input name="price" defaultValue={(module.priceCents/100).toFixed(2).replace(".",",")} required/></label><label>Descrição<input name="description" defaultValue={module.description} required/></label><label className="check-line"><input name="active" type="checkbox" defaultChecked={module.active}/> Disponível</label><label className="check-line"><input name="future" type="checkbox" defaultChecked={module.future}/> Implementação futura</label></div><button className="button">Salvar módulo <span>→</span></button></form></details>)}</div></article>
  </PanelShell>;
}
