import { Router } from "express";
import { db } from "@workspace/db";
import { factoriesTable, supplyOrdersTable } from "@workspace/db";
import { eq, sql } from "drizzle-orm";

const router = Router();

router.get("/", async (req, res) => {
  const factories = await db.select().from(factoriesTable).orderBy(factoriesTable.name);
  res.json(factories.map((f) => ({
    id: f.id,
    name: f.name,
    address: f.address,
    phone: f.phone,
    notes: f.notes,
    createdAt: f.createdAt.toISOString(),
  })));
});

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

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

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

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

export default router;
