import {
    pgTable,
    uuid,
    timestamp,
    bigint,
    boolean,
    jsonb,
    numeric, pgEnum,
} from "drizzle-orm/pg-core"

import { tenants } from "./tenants"
import { authUsers } from "./auth_users"
import {credentialTypesEnum} from "./enums";



export const userCredentials = pgTable("user_credentials", {
    id: uuid("id").primaryKey().defaultRandom(),

    createdAt: timestamp("created_at", { withTimezone: true })
        .notNull()
        .defaultNow(),

    userId: uuid("user_id")
        .notNull()
        .references(() => authUsers.id),

    updatedAt: timestamp("updated_at", { withTimezone: true }),

    tenantId: bigint("tenant_id", { mode: "number" })
        .notNull()
        .references(() => tenants.id),

    smtpPort: numeric("smtp_port"),
    smtpSsl: boolean("smtp_ssl"),

    type: credentialTypesEnum("type").notNull(),

    imapPort: numeric("imap_port"),
    imapSsl: boolean("imap_ssl"),

    emailEncrypted: jsonb("email_encrypted"),
    passwordEncrypted: jsonb("password_encrypted"),

    smtpHostEncrypted: jsonb("smtp_host_encrypted"),
    imapHostEncrypted: jsonb("imap_host_encrypted"),

    accessTokenEncrypted: jsonb("access_token_encrypted"),
    refreshTokenEncrypted: jsonb("refresh_token_encrypted"),
})

export type UserCredential = typeof userCredentials.$inferSelect
export type NewUserCredential = typeof userCredentials.$inferInsert
