import { Injectable, Inject } from '@nestjs/common';
import { REQUEST } from '@nestjs/core';
import { Request } from 'express';
import { Role } from '../enums/role.enum';

@Injectable()
export class PermissionsService {
  constructor(
    @Inject(REQUEST) private readonly request: Request
  ) {}

  private readonly permissions = {
    [Role.ADMIN]: [
      'admin:all',
      'admin:dashboard',
      'admin:users',
      'admin:roles',
      'admin:settings',
      'admin:content',
      'admin:theme',
      'admin:email',
      'admin:notifications',
      'admin:business',
      'admin:production',
      'admin:inventory',
      'admin:orders',
      'admin:customers',
      'admin:quality',
      'admin:maintenance',
      'admin:supply-chain',
      'admin:payments',
      'admin:analytics',
      'admin:reports',
      'admin:performance',
      'admin:system'
    ],
    [Role.MANAGER]: [
      'manager:production',
      'manager:workers',
      'manager:inventory',
      'manager:quality',
      'manager:orders'
    ],
    [Role.WORKER]: [
      'worker:production',
      'worker:reports',
      'worker:attendance',
      'worker:tasks'
    ],
    [Role.CUSTOMER]: [
      'customer:orders',
      'customer:profile',
      'customer:notifications'
    ]
  };

  getUserPermissions(): { permissions: string[] } {
    const userRole = this.getCurrentUserRole();
    const userPermissions = this.permissions[userRole] || [];
    return { permissions: userPermissions };
  }

  getAllPermissions(): Record<string, string[]> {
    return this.permissions;
  }

  private getCurrentUserRole(): Role {
    // Get the user from the request context
    const user = this.request.user as any;
    if (user && user.role) {
      return user.role;
    }
    // Fallback to customer role if no user or role found
    return Role.CUSTOMER;
  }
}
