import { roleEnum } from "@/db/schema";

/**
 * Single Source of Truth für Rollen. Die zulässigen Werte stammen aus dem
 * DB-Enum `role` (Workstream 2) und werden hier NICHT neu definiert, sondern
 * abgeleitet, damit DB und Anwendung garantiert übereinstimmen.
 */
export const ALL_ROLES = roleEnum.enumValues;
export type Role = (typeof ALL_ROLES)[number];

export const ROLES = {
  PLATFORM_ADMIN: "platform_admin",
  WEHR_ADMIN: "wehr_admin",
  WEHR_READ: "wehr_read",
} as const satisfies Record<string, Role>;

export function isRole(value: unknown): value is Role {
  return (
    typeof value === "string" && (ALL_ROLES as readonly string[]).includes(value)
  );
}

/**
 * Wehr-Scoping (default-deny): platform_admin darf wehrübergreifend; alle
 * anderen Rollen nur die eigene Wehr. Ohne eigene `brigadeId` wird verweigert.
 */
export function canAccessBrigade(
  role: Role,
  ownBrigadeId: string | null,
  targetBrigadeId: string,
): boolean {
  if (role === ROLES.PLATFORM_ADMIN) return true;
  if (!ownBrigadeId) return false;
  return ownBrigadeId === targetBrigadeId;
}
