import { createFileRoute, Link, useNavigate } from "@tanstack/react-router";
import { toast } from "sonner";
import { ArrowLeft } from "lucide-react";

import { Button } from "@/components/ui/button";
import {
  ProposalWizard,
  type ProposalDraft,
  type ProposalWizardTotals,
} from "@/components/proposal-wizard";
import { proposalsStore } from "@/lib/store/proposals-store";
import { addDaysISO, slugify } from "@/lib/format";
import type { ProposalDetail, ProposalSummary } from "@/lib/mock/types";


export const Route = createFileRoute("/_admin/propostas/nova")({
  component: NovaPropostaPage,
});

const initialDraft: ProposalDraft = {
  clientName: "",
  contactName: "",
  email: "",
  whatsapp: "",
  website: "",
  title: "",
  items: [],
  scope: "",
  deliverables: [""],
  observations: "",
  deadlineDays: 21,
  validUntil: addDaysISO(15),
  paymentMethods: ["pix"],
  installments: 1,
  status: "rascunho",
};

function NovaPropostaPage() {
  const navigate = useNavigate();

  const handleSubmit = (draft: ProposalDraft, totals: ProposalWizardTotals) => {
    const number = proposalsStore.nextNumber();
    const slug = `${slugify(draft.clientName)}-${number.toLowerCase()}`;
    const today = new Date().toISOString().slice(0, 10);
    const proposal: ProposalSummary = {
      id: `prop-${number}`,
      slug,
      number,
      clientId: `cli-${number}`,
      clientName: draft.clientName,
      title: draft.title,
      total: totals.oneTime,
      recurringTotal: totals.recurring || undefined,
      status: "rascunho",
      validUntil: draft.validUntil,
      createdAt: today,
    };
    const detail: ProposalDetail = {
      id: proposal.id,
      contactName: draft.contactName,
      email: draft.email,
      whatsapp: draft.whatsapp,
      website: draft.website || undefined,
      items: draft.items,
      scope: draft.scope,
      deliverables: draft.deliverables,
      observations: draft.observations || undefined,
      deadlineDays: draft.deadlineDays,
      paymentMethod: draft.paymentMethods[0] ?? "pix",
      paymentMethods: draft.paymentMethods,
      installments: draft.installments,
    };
    proposalsStore.add(proposal, detail);
    toast.success("Proposta criada!", {
      description: `#${number} salva como rascunho.`,
    });
    navigate({ to: "/propostas" });
  };

  return (
    <ProposalWizard
      mode="create"
      title="Nova proposta"
      initial={initialDraft}
      submitLabel="Salvar proposta"
      onSubmit={handleSubmit}
      backSlot={
        <Button asChild variant="ghost" size="sm" className="-ml-2 gap-1 text-muted-foreground">
          <Link to="/propostas">
            <ArrowLeft className="h-4 w-4" /> Voltar para propostas
          </Link>
        </Button>
      }
    />
  );
}

