/**
 * Workstation System - Role-based interface routing
 * Based on Aumentum Registry architecture
 */

export type WorkstationType = 
  | 'web-access'      // General web access (existing)
  | 'administrator'   // Admin workstation
  | 'cashier'         // Cashier workstation
  | 'gis-viewer'      // GIS Viewer
  | 'archiving'       // Web client archiving system
  | 'indexing';       // Property/document indexing

export interface WorkstationConfig {
  id: WorkstationType;
  name: string;
  description: string;
  icon: string;
  route: string;
  requiredRoles: string[];
  features: string[];
}

export const WORKSTATIONS: WorkstationConfig[] = [
  {
    id: 'web-access',
    name: 'Web Access',
    description: 'General web access for searching and viewing records',
    icon: '🌐',
    route: '/dashboard',
    requiredRoles: ['ROLE_SCANNING_OPERATOR', 'ROLE_ARCHIVING_OFFICER', 'ROLE_ADMINISTRATOR'],
    features: [
      'Property Search',
      'Document Search',
      'Transaction Search',
      'Party Search',
      'Boundary Search'
    ]
  },
  {
    id: 'administrator',
    name: 'Administrator Workstation',
    description: 'System administration and configuration',
    icon: '⚙️',
    route: '/workstation/administrator',
    requiredRoles: ['ROLE_ADMINISTRATOR'],
    features: [
      'User Management',
      'Role Management',
      'System Configuration',
      'Database Administration',
      'Audit Logs',
      'Report Generation'
    ]
  },
  {
    id: 'cashier',
    name: 'Cashier Workstation',
    description: 'Payment processing and fee collection',
    icon: '💰',
    route: '/workstation/cashier',
    requiredRoles: ['ROLE_CASHIER', 'ROLE_ADMINISTRATOR'],
    features: [
      'Fee Collection',
      'Payment Processing',
      'Receipt Generation',
      'Transaction Fees',
      'Payment History',
      'Financial Reports'
    ]
  },
  {
    id: 'gis-viewer',
    name: 'GIS Viewer',
    description: 'Geographic Information System viewer for maps and spatial data',
    icon: '🗺️',
    route: '/workstation/gis-viewer',
    requiredRoles: ['ROLE_SCANNING_OPERATOR', 'ROLE_ARCHIVING_OFFICER', 'ROLE_ADMINISTRATOR'],
    features: [
      'Interactive Maps',
      'Property Boundaries',
      'Spatial Queries',
      'Layer Management',
      'Measurement Tools',
      'Print Maps'
    ]
  },
  {
    id: 'archiving',
    name: 'Archiving System',
    description: 'Document archiving and retrieval system',
    icon: '📦',
    route: '/workstation/archiving',
    requiredRoles: ['ROLE_SCANNING_OPERATOR', 'ROLE_ARCHIVING_OFFICER', 'ROLE_ADMINISTRATOR'],
    features: [
      'Document Upload',
      'Archive Management',
      'Document Retrieval',
      'Version Control',
      'Bulk Operations',
      'Archive Reports'
    ]
  },
  {
    id: 'indexing',
    name: 'Indexing Workstation',
    description: 'Property and document indexing workstation',
    icon: '📝',
    route: '/workstation/indexing',
    requiredRoles: ['ROLE_INDEXING_OFFICER', 'ROLE_ADMINISTRATOR'],
    features: [
      'Property Indexing',
      'Document Indexing',
      'Batch Indexing',
      'Quality Control',
      'Index Reports',
      'Data Validation'
    ]
  }
];

/**
 * Get available workstations for a user based on their roles
 */
export function getAvailableWorkstations(userRoles: string[]): WorkstationConfig[] {
  return WORKSTATIONS.filter(ws => {
    // If no required roles, workstation is available to all
    if (ws.requiredRoles.length === 0) return true;
    
    // Check if user has any of the required roles
    return ws.requiredRoles.some(role => userRoles.includes(role));
  });
}

/**
 * Get workstation by ID
 */
export function getWorkstation(id: WorkstationType): WorkstationConfig | undefined {
  return WORKSTATIONS.find(ws => ws.id === id);
}

/**
 * Check if user has access to a workstation
 */
export function hasWorkstationAccess(workstationId: WorkstationType, userRoles: string[]): boolean {
  const workstation = getWorkstation(workstationId);
  if (!workstation) return false;
  
  if (workstation.requiredRoles.length === 0) return true;
  
  return workstation.requiredRoles.some(role => userRoles.includes(role));
}

