import { useState, useEffect } from "react"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter, DialogDescription, } from "@/components/ui/dialog"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Textarea } from "@/components/ui/textarea"; import { Button } from "@/components/ui/button"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Badge } from "@/components/ui/badge"; import { Separator } from "@/components/ui/separator"; import { Lock, Trash2, DollarSign, Calendar } from "lucide-react"; import { ColorPicker } from "./ColorPicker"; import { LinkList } from "./LinkList"; import { CLIENTES, BUS, BU_CM, MARCAS, STATUS, COLORS, MESES, type Status } from "@/data/lists"; import { useProjects, type Project } from "@/lib/store"; import { useAuth } from "@/context/AuthContext"; import { colorHex } from "@/lib/colors"; import { cn } from "@/lib/utils"; interface Props { open: boolean; onOpenChange: (v: boolean) => void; project?: Project | null; // editar; vacío = crear } const empty = (): Omit => { const now = new Date(); return { nombre: "", color: "blue", cliente: "", bu: "", cm: "", marca: "", solicitante: "", comentarios: "", briefLink: "", propuestaLinks: [], afLinks: [], status: "", monto: null, mes: MESES[now.getMonth()], anio: now.getFullYear(), }; }; export function ProjectDialog({ open, onOpenChange, project }: Props) { const { add, update, remove } = useProjects(); const { isGerardo } = useAuth(); const isEdit = !!project; const [form, setForm] = useState>(empty()); useEffect(() => { if (project) { const { id: _i, createdAt: _c, ...rest } = project; setForm(rest); } else if (open) { setForm(empty()); } }, [project, open]); const set = (k: K, v: (typeof form)[K]) => setForm((f) => ({ ...f, [k]: v })); // BU → CM automático const onBU = (bu: string) => setForm((f) => ({ ...f, bu, cm: BU_CM[bu] ?? "" })); const requiredOk = form.nombre.trim() && form.cliente && form.bu && form.marca && form.solicitante.trim(); const submit = () => { if (!requiredOk) return; if (isEdit && project) { update(project.id, form); } else { add({ ...form, id: crypto.randomUUID(), createdAt: Date.now() }); } onOpenChange(false); }; const onDelete = () => { if (project && confirm("¿Eliminar este proyecto?")) { remove(project.id); onOpenChange(false); } }; const closed = !!form.status; return ( {/* Pestaña de color superior */}
{isEdit ? form.nombre || "Sin título" : "Nuevo proyecto"} {form.mes} · {form.anio} {closed && ( Cerrado )}
{/* Nombre */}
set("nombre", e.target.value)} placeholder="Ej: Promoción Día de las Madres" className="h-10" />
{/* Color */}
set("color", c)} />
{/* Cliente */}
{/* Marca */}
{/* BU */}
{/* CM autocompletado */}
{/* Solicitante */}
set("solicitante", e.target.value)} placeholder="Nombre de quien solicita" className="h-10" />
{/* Comentarios */}