import { PanelShell } from "@/components/panel-shell";
import { StateCityFields } from "@/components/state-city-fields";
import { ManualLeadPricingFields } from "@/components/manual-lead-pricing-fields";
import { activateCampaignLead, createManualCampaignLead } from "@/lib/admin-actions";
import { requirePlatformAccess } from "@/lib/auth";
import { db } from "@/lib/db";

const money=(value:number)=>(value/100).toLocaleString("pt-BR",{style:"currency",currency:"BRL"});
const statusLabel:Record<string,string>={NEW:"Novo contato",AWAITING_PAYMENT:"Aguardando pagamento",BILLING_ERROR:"Erro na cobrança",CONVERTED:"Cliente ativo"};

export default async function Leads({searchParams}:{searchParams:Promise<{lead?:string}>}){
  const {role}=await requirePlatformAccess(["SUPER_ADMIN","ADMIN","SELLER"]);
  const [leads,plans,modules,sellers,feedback]=await Promise.all([
    db.campaignLead.findMany({include:{seller:{select:{name:true}}},orderBy:{createdAt:"desc"},take:100}),
    db.plan.findMany({where:{active:true},orderBy:{priceCents:"asc"}}),
    db.addonModule.findMany({where:{active:true,future:false},select:{id:true,name:true,description:true,priceCents:true},orderBy:{priceCents:"asc"}}),
    db.user.findMany({where:{platformRole:"SELLER",deletedAt:null},select:{id:true,name:true},orderBy:{name:"asc"}}),
    searchParams,
  ]);

  return <PanelShell eyebrow="COMERCIAL" title="Leads e ativações" admin activePath="/admin/leads">
    {feedback.lead==="criado"&&<div className="form-card"><strong>Contato cadastrado. Agora você pode ativá-lo como cliente.</strong></div>}
    {feedback.lead==="cobranca-criada"&&<div className="form-card"><strong>Contato cadastrado, cobrança da adesão e assinatura mensal criadas no Asaas.</strong></div>}
    {feedback.lead==="cobranca-erro"&&<div className="form-card form-feedback error"><strong>O contato foi salvo, mas o Asaas não conseguiu criar a cobrança.</strong><span>Confira a configuração e tente novamente antes de ativar.</span></div>}
    {feedback.lead==="ativado"&&<div className="form-card"><strong>Cliente ativado e acesso criado com sucesso.</strong></div>}
    <article className="form-card">
      <div className="card-head"><div><p className="eyebrow">CADASTRO MANUAL</p><h2>Novo contato comercial</h2><small>Use para clientes que chegaram por telefone, WhatsApp, indicação ou atendimento direto.</small></div></div>
      <form action={createManualCampaignLead} className="form-stack">
        <div className="form-grid two">
          <label>Empresa<input name="companyName" required/></label><label>CPF/CNPJ<input name="document" required/></label>
          <label>Responsável<input name="responsibleName" required/></label><label>E-mail<input name="email" type="email" required/></label>
          <label>Telefone/WhatsApp<input name="phone" required/></label><label>Segmento<input name="segment" required/></label>
          <label>Modelo<select name="businessModel"><option value="PRODUCTS">Produtos</option><option value="SERVICES">Serviços</option><option value="MIXED">Produtos e serviços</option></select></label>
          <label>Domínio existente (opcional)<input name="domain" placeholder="empresa.com.br"/></label>
          {role!=="SELLER"&&<label>Vendedor<select name="sellerId"><option value="">Sem vendedor</option>{sellers.map(seller=><option value={seller.id} key={seller.id}>{seller.name}</option>)}</select></label>}
        </div>
        <ManualLeadPricingFields plans={plans.map(plan=>({id:plan.id,name:plan.name,priceCents:plan.priceCents,setupFeeCents:plan.setupFeeCents}))} modules={modules}/>
        <StateCityFields prefix="manual-lead"/>
        <button className="button">Cadastrar contato <span>→</span></button>
      </form>
    </article>
    <div className="module-toolbar"><p>{leads.length} contato(s) cadastrado(s)</p></div>
    {leads.length?<div className="catalog-table">{leads.map(lead=><article className="form-card" key={lead.id}>
      <div className="card-head"><div><h2>{lead.companyName}</h2><small>{lead.responsibleName} · {lead.email} · {lead.phone}</small></div><span className={`pill ${lead.status==="AWAITING_PAYMENT"?"trial":lead.status==="CONVERTED"?"active":""}`}>{statusLabel[lead.status]??lead.status}</span></div>
      <div className="plan-limit-summary"><span>{lead.planName}</span><span>{money(lead.setupFeeCents)} adesão</span><span>{money(lead.monthlyCents)}/mês</span><span>{lead.seller?.name??"Sem vendedor"}</span>{lead.domain&&<span>{lead.domain}</span>}</div>
      {lead.paymentUrl&&<div className="row-actions"><a href={lead.paymentUrl} target="_blank" rel="noreferrer">Abrir cobrança</a></div>}
      {lead.status!=="CONVERTED"&&<form action={activateCampaignLead} className="form-stack">
        <h3>Ativar como cliente</h3><p>Cria a empresa, o painel do lojista e o acesso do responsável usando os dados acima.</p>
        <input type="hidden" name="leadId" value={lead.id}/>
        <div className="form-grid two"><label>Subdomínio<input name="subdomain" required minLength={3} placeholder="nome-da-empresa"/></label><label>Senha inicial<input name="password" type="password" required minLength={10}/></label></div>
        <button className="button">Ativar cliente <span>→</span></button>
      </form>}
    </article>)}</div>:<div className="module-empty"><h2>Nenhum contato recebido</h2></div>}
  </PanelShell>;
}
