import {
	integer,
	pgEnum,
	pgTable,
	text,
	timestamp,
	unique,
	uuid,
} from "drizzle-orm/pg-core";
import { createInsertSchema, createSelectSchema } from "drizzle-zod";
import type { z } from "zod";

export const loadTypeEnum = pgEnum("load_type", ["drop", "live"]);

export const opendockArticleSetup = pgTable(
	"opendock_article_setup",
	{
		id: uuid("id").defaultRandom().primaryKey(),
		av: integer("av").notNull(),
		description: text("description").notNull(),
		customer: text("customer").notNull(), // customer should be a concat of the ID - Desc
		customerDescription: text("customer_description").notNull(),
		loadType: loadTypeEnum("load_type").notNull().default("drop"),
		dock: text("dock").notNull(),
		upd_date: timestamp("upd_date", { withTimezone: true })
			.notNull()
			.defaultNow(),
		upd_user: text("upd_user").notNull().default("lst-system"),
		createdAt: timestamp("created_at", { withTimezone: true })
			.notNull()
			.defaultNow(),
		add_user: text("add_user").notNull().default("lst-system"),
	},
	(table) => ({
		uniqueAvCustomer: unique("uq_opendock_article_setup_av_customer").on(
			table.av,
			table.customer,
		),
	}),
);

export const opendockArticleSetupSchema =
	createSelectSchema(opendockArticleSetup);
export const newOpendockArticleSetupSchema =
	createInsertSchema(opendockArticleSetup);

export type OpendockArticleSetup = z.infer<typeof opendockArticleSetupSchema>;
export type NewOpendockArticleSetup = z.infer<
	typeof newOpendockArticleSetupSchema
>;
