import type { DatabaseSync } from 'node:sqlite';
import { asRow } from '../row.ts';
import type { UserRow } from '../../types/db.js';

export interface NewUser {
  email: string;
  passwordHash: string;
}

export function createUser(db: DatabaseSync, { email, passwordHash }: NewUser): UserRow | null {
  const info = db
    .prepare('INSERT INTO users (email, password_hash, created_at) VALUES (?, ?, ?)')
    .run(email, passwordHash, new Date().toISOString());
  return getUserById(db, Number(info.lastInsertRowid));
}

export function getUserByEmail(db: DatabaseSync, email: string): UserRow | null {
  return asRow<UserRow>(db.prepare('SELECT * FROM users WHERE email = ?').get(email)) ?? null;
}

export function getUserById(db: DatabaseSync, id: number): UserRow | null {
  return asRow<UserRow>(db.prepare('SELECT * FROM users WHERE id = ?').get(id)) ?? null;
}
