import {
    text,
    pgTable,
    numeric,
    index,
    timestamp,
    boolean,
    uuid,
    uniqueIndex,
} from "drizzle-orm/pg-core";
import { createInsertSchema, createSelectSchema } from "drizzle-zod";
import { z } from "zod";

export const users = pgTable(
    "users",
    {
        user_id: uuid("user_id").defaultRandom().primaryKey(),
        username: text("username").notNull(),
        email: text("email").notNull(),
        password: text("password").notNull(),
        passwordToken: text("passwordToken"),
        passwordTokenExpires: timestamp("passwordTokenExpires"),
        acitve: boolean("active").default(true).notNull(),
        pinCode: numeric("pingcode"),
        role: text("role").default("user").notNull(), // temp column while we migrate the front end
        lastLogin: timestamp("lastLogin").defaultNow(),
        add_User: text("add_User").default("LST_System").notNull(),
        add_Date: timestamp("add_Date").defaultNow(),
        upd_user: text("upd_User").default("LST_System").notNull(),
        upd_date: timestamp("upd_date").defaultNow(),
    },
    (table) => [
        // uniqueIndex('emailUniqueIndex').on(sql`lower(${table.email})`),
        uniqueIndex("username").on(table.username),
    ]
);

// Schema for inserting a user - can be used to validate API requests
// export const insertUsersSchema = createInsertSchema(users, {
//     username: z.string().min(3, {message: "Username must be at least 3 characters"}),
//     email: z.string().email({message: "Invalid email"}),
//     password: z.string().min(8, {message: "Password must be at least 8 characters"}),
// });
// Schema for selecting a Expenses - can be used to validate API responses
export const selectUsersSchema = createSelectSchema(users);
