/**
 * Role-based Access System for Admin v2
 *
 * Roles determine which categories and modules are visible
 */

import { CategoryId } from './navigation'

export type RoleId = 'developer' | 'manager' | 'auditor' | 'dsb'

export interface Role {
  id: RoleId
  name: string
  description: string
  icon: string
  visibleCategories: CategoryId[]
  color: string
}

export const roles: Role[] = [
  {
    id: 'developer',
    name: 'Entwickler',
    description: 'Voller Zugriff auf alle Bereiche',
    icon: 'code',
    visibleCategories: ['communication', 'ai', 'education', 'website'],
    color: 'bg-primary-100 border-primary-300 text-primary-700',
  },
  {
    id: 'manager',
    name: 'Manager',
    description: 'Executive Uebersicht',
    icon: 'chart',
    visibleCategories: ['communication', 'website'],
    color: 'bg-blue-100 border-blue-300 text-blue-700',
  },
  {
    id: 'auditor',
    name: 'Auditor',
    description: 'Compliance Pruefung',
    icon: 'clipboard',
    visibleCategories: ['communication'],
    color: 'bg-amber-100 border-amber-300 text-amber-700',
  },
  {
    id: 'dsb',
    name: 'DSB',
    description: 'Datenschutzbeauftragter',
    icon: 'shield',
    visibleCategories: ['communication'],
    color: 'bg-purple-100 border-purple-300 text-purple-700',
  },
]

// Storage key for localStorage
const ROLE_STORAGE_KEY = 'admin-v2-selected-role'

// Get role by ID
export function getRoleById(id: RoleId): Role | undefined {
  return roles.find(role => role.id === id)
}

// Check if category is visible for a role
export function isCategoryVisibleForRole(categoryId: CategoryId, roleId: RoleId): boolean {
  const role = getRoleById(roleId)
  return role ? role.visibleCategories.includes(categoryId) : false
}

// Get stored role from localStorage (client-side only)
export function getStoredRole(): RoleId | null {
  if (typeof window === 'undefined') return null
  const stored = localStorage.getItem(ROLE_STORAGE_KEY)
  if (stored && roles.some(r => r.id === stored)) {
    return stored as RoleId
  }
  return null
}

// Store role in localStorage
export function storeRole(roleId: RoleId): void {
  if (typeof window === 'undefined') return
  localStorage.setItem(ROLE_STORAGE_KEY, roleId)
}

// Clear stored role
export function clearStoredRole(): void {
  if (typeof window === 'undefined') return
  localStorage.removeItem(ROLE_STORAGE_KEY)
}

// Check if this is a first-time visitor (no role stored)
export function isFirstTimeVisitor(): boolean {
  return getStoredRole() === null
}

// Get visible categories for a role
export function getVisibleCategoriesForRole(roleId: RoleId): CategoryId[] {
  const role = getRoleById(roleId)
  return role ? role.visibleCategories : []
}
