import { sql } from 'drizzle-orm';
import { getDb, type DbEnv } from './db.js';

export type SessionRole = 'owner' | 'user';

function normalizeExecuteRows(result: unknown): unknown[] {
  if (Array.isArray(result)) return result;
  const rows = (result as { rows?: unknown[] } | null)?.rows;
  return rows ?? [];
}

function parseRoles(raw: unknown): string[] {
  if (typeof raw !== 'string') return [];
  try {
    const parsed: unknown = JSON.parse(raw);
    return Array.isArray(parsed) ? parsed.filter((r): r is string => typeof r === 'string') : [];
  } catch {
    return [];
  }
}

/** Highest storefront privilege: owner > user. */
export async function resolveSessionRole(env: DbEnv, userId: string): Promise<SessionRole> {
  const { db } = getDb(env);
  const res = await db.execute(sql`SELECT roles FROM auth_users WHERE id = ${userId} LIMIT 1`);
  const rows = normalizeExecuteRows(res);
  const row = rows[0] as { roles?: unknown } | undefined;
  const roles = parseRoles(row?.roles);
  return roles.includes('owner') ? 'owner' : 'user';
}
