import { sql } from 'drizzle-orm'
import { text, sqliteTable } from 'drizzle-orm/sqlite-core'

export const users = sqliteTable('users', {
    // id è l'id unico di questo utente, non è modificabile una volta creato l'utente.
    id: text('id')
        .primaryKey()
        .default(sql`(lower(hex(randomblob(16))))`),

    // Username è il nome leggibile di questo utente utilizzato anche per le
    // route per singolo utente, deve essere unico nel sito.
    //
    // NOTE: Quando un utente accede per la prima volta di default gli viene
    // chiesto se usare quello dell'account che sta usando o se cambiarlo
    // (in teoria non dovrebbe essere un problema poterlo modificare
    // successivamente).
    username: text('username').unique().notNull(),

    // FullName da mostrare in giro per il sito
    fullName: text('fullname'),

    // Email per eventuale contatto
    email: text('email'),
})

export type User = typeof users.$inferSelect // return type when queried
export type InsertUser = typeof users.$inferInsert // insert type

export const accounts = sqliteTable('accounts', {
    // id è l'id unico di questo account, non è modificabile una volta creato l'account.
    id: text('id').primaryKey(),

    userId: text('userId')
        .notNull()
        .references(() => users.id),

    provider: text('provider').$type<'poisson' | 'ateneo'>().notNull(),

    token: text('token').notNull(),
})

export type Account = typeof accounts.$inferSelect // return type when queried
export type InsertAccount = typeof accounts.$inferInsert // insert type
