import type { UserRole } from "@/src/types/user";

/** Ruoli canonici in italiano (valori consigliati in DB). */
export const USER_ROLES: UserRole[] = ["amministratore", "tecnico", "operatore"];

/** Mappatura ruoli legacy → ruoli attuali. */
const LEGACY_ROLE_MAP: Record<string, UserRole> = {
  admin: "amministratore",
  sviluppo: "amministratore",
  manager: "tecnico",
  user: "operatore",
  amministratore: "amministratore",
  tecnico: "tecnico",
  operatore: "operatore",
};

export const ROLE_LABELS: Record<UserRole, string> = {
  amministratore: "Amministratore",
  tecnico: "Tecnico",
  operatore: "Operatore",
};

export function isUserRole(value: string): value is UserRole {
  return USER_ROLES.includes(value as UserRole);
}

export function normalizeRole(value: string): UserRole | null {
  const key = value.trim().toLowerCase();
  const mapped = LEGACY_ROLE_MAP[key];
  return mapped ?? null;
}

export interface AppPermissions {
  canManageUtenti: boolean;
  canManageStabilimenti: boolean;
  canScaricoArticoli: boolean;
  canAssegnaArticoliMacchina: boolean;
  canEditMacchine: boolean;
  canRemoveArticoloMacchina: boolean;
  canSearchPrices: boolean;
}

export function getPermissions(ruolo: UserRole): AppPermissions {
  switch (ruolo) {
    case "amministratore":
      return {
        canManageUtenti: true,
        canManageStabilimenti: true,
        canScaricoArticoli: true,
        canAssegnaArticoliMacchina: true,
        canEditMacchine: true,
        canRemoveArticoloMacchina: true,
        canSearchPrices: true,
      };
    case "tecnico":
      return {
        canManageUtenti: false,
        canManageStabilimenti: false,
        canScaricoArticoli: true,
        canAssegnaArticoliMacchina: true,
        canEditMacchine: true,
        canRemoveArticoloMacchina: true,
        canSearchPrices: true,
      };
    case "operatore":
      return {
        canManageUtenti: false,
        canManageStabilimenti: false,
        canScaricoArticoli: false,
        canAssegnaArticoliMacchina: false,
        canEditMacchine: false,
        canRemoveArticoloMacchina: false,
        canSearchPrices: false,
      };
  }
}
