import { relations } from "drizzle-orm";
import {
pgTable,
pgEnum,
index,
timestamp,
varchar,
bigint,
uuid,
text,
} from "drizzle-orm/pg-core";
import { floor } from "./floor";
import { task } from "./task";
import { projectMaterials } from "./projectMaterials";
import { z } from "zod";
import { projectStatusEnum as projectStatusEnumValues,typeCotizationEnum as typeCotizationEnumValues,typeEnum as typeEnumValues } from "@/server/project/domain/models";
export const type = pgEnum("type", typeEnumValues);
export const typeEnum = z.enum(type.enumValues);
export const projectStatus=pgEnum("status", projectStatusEnumValues)
export const projectStatusEnum = z.enum(projectStatus.enumValues, {
message: "Estatus invalido.",
});
export const project = pgTable(
"project",
{
id: uuid("id").primaryKey().notNull(),
name: varchar("name", { length: 250 }).notNull(),
residence: text("residence").notNull(),
costPerMeter: bigint("costPerMeter", { mode: "number" })
.notNull()
.default(0),
totalCostPerMeter: bigint("totalCostPerMeter", { mode: "number" })
.default(0),
totalCostMaterials: bigint("totalCostMaterials", { mode: "number" })
.default(0),
laborCost: bigint("laborCost", { mode: "number" }).notNull().default(0),
startDate: timestamp("startDate", { mode: "date" }).notNull().defaultNow(),
typeCotization: text('type_cotization').notNull(),
estimadedEndDate: timestamp("estimadedEndDate", { mode: "date" })
.notNull()
.defaultNow(),
status: projectStatus("status").default("no iniciada").notNull(),
createdAT: timestamp("created_at").defaultNow().notNull(),
updatedAt:timestamp('updated_at').defaultNow().$onUpdate(()=>new Date())
},
(t) => ({
project_name: index("project_name").on(t.name),
project_startDate: index("startDate").on(t.startDate),
project_status: index("project_status").on(t.status),
})
);
export const projectRelations = relations(project, ({ many }) => ({
floor: many(floor),
task: many(task),
projectMaterials: many(projectMaterials),
}));