import { Router } from "express";
import { db } from "@workspace/db";
import { customersTable } from "@workspace/db";
import { eq } from "drizzle-orm";

const router = Router();

router.get("/", async (req, res) => {
  const rows = await db.select().from(customersTable).orderBy(customersTable.name);
  res.json(rows.map(r => ({ ...r, balance: Number(r.balance), createdAt: r.createdAt.toISOString() })));
});

router.post("/", async (req, res) => {
  const { name, phone, address, notes } = req.body;
  if (!name) return res.status(400).json({ error: "name required" });
  const [r] = await db.insert(customersTable).values({ name, phone, address, notes }).returning();
  res.status(201).json({ ...r, balance: Number(r.balance), createdAt: r.createdAt.toISOString() });
});

router.get("/:id", async (req, res) => {
  const id = parseInt(req.params.id);
  const [r] = await db.select().from(customersTable).where(eq(customersTable.id, id));
  if (!r) return res.status(404).json({ error: "Not found" });
  res.json({ ...r, balance: Number(r.balance), createdAt: r.createdAt.toISOString() });
});

router.patch("/:id", async (req, res) => {
  const id = parseInt(req.params.id);
  const { name, phone, address, notes } = req.body;
  const updates: Record<string, unknown> = {};
  if (name !== undefined) updates.name = name;
  if (phone !== undefined) updates.phone = phone;
  if (address !== undefined) updates.address = address;
  if (notes !== undefined) updates.notes = notes;
  const [r] = await db.update(customersTable).set(updates).where(eq(customersTable.id, id)).returning();
  if (!r) return res.status(404).json({ error: "Not found" });
  res.json({ ...r, balance: Number(r.balance), createdAt: r.createdAt.toISOString() });
});

router.delete("/:id", async (req, res) => {
  const id = parseInt(req.params.id);
  await db.delete(customersTable).where(eq(customersTable.id, id));
  res.status(204).end();
});

export default router;
