export const PERMISSIONS = {
  DASHBOARD: {
    VIEW_CLOCK_IN_AND_CLOCK_OUT_USERS: "view_clock_in_and_clock_out_users",
  },
  TIME_TRACKING: {
    VIEW: "view_time_tracking",
    MANAGE: "manage_time_tracking",
  },
  LEAVES: {
    VIEW: "view_leaves",
    MANAGE_MY_LEAVES: "manage_my_leaves",
    MANAGE_ALL_LEAVES: "manage_all_leaves",
    APPROVE_LEAVES: "approve_leaves",
  },
  EMPLOYEES: {
    VIEW: "view_employees",
    MANAGE: "manage_employees",
    VIEW_PROFILE: "view_employee_profile",
    EDIT_PROFILE: "edit_employee_profile",
    VIEW_SALARY_INFO: "view_salary_info",
    VIEW_LEAVE_INFO: "view_leave_info",
    VIEW_EMPLOYEE_REPORT: "view_employee_report",
  },
  DEPARTMENTS: {
    VIEW: "view_departments",
    MANAGE: "manage_departments",
  },
  CONSULTANTS: {
    VIEW: "view_consultants",
    MANAGE: "manage_consultants",
  },
  CONTRACTORS: {
    VIEW: "view_contractors",
    MANAGE: "manage_contractors",
  },
  VENDORS: {
    VIEW: "view_vendors",
    MANAGE: "manage_vendors",
  },
  ACTIVITY_TYPES: {
    VIEW: "view_activity_types",
    MANAGE: "manage_activity_types",
  },
  CLIENTS: {
    VIEW: "view_clients",
    MANAGE: "manage_clients",
  },
  PROJECTS: {
    VIEW: "view_projects",
    MANAGE: "manage_projects",
    VIEW_ALL_PROJECT_ASSIGNED_EMPLOYEES: "view_all_project_assigned_employees",
    MANAGE_PROJECT_ASSIGNED_EMPLOYEES: "manage_project_assigned_employees",
  },
  ROLES: {
    VIEW: "view_roles",
    MANAGE: "manage_roles",
  },
  PERMISSIONS: {
    VIEW: "view_permissions",
    MANAGE: "manage_permissions",
  },
  COMPANY_SETTINGS: {
    VIEW: "view_company_settings",
    MANAGE: "manage_company_settings",
  },
  COMPANY: {
    VIEW: "view_company",
    MANAGE: "manage_company",
  },
  SALARY_SETTINGS: {
    VIEW: "view_salary_settings",
    MANAGE: "manage_salary_settings",
  },
  LEAVE_TYPES: {
    VIEW: "view_leave_types",
    MANAGE: "manage_leave_types",
  },
  REPORTS: {
    VIEW_PROJECT_REPORT: "view_project_report",
    VIEW_PROJECT_COSTING_REPORT: "view_project_costing_report",
    VIEW_TIMESHEET_REPORT: "view_timesheet_report",
    VIEW_CLOCK_IN_REPORT: "view_clock_in_report",
    VIEW_ALL_EMPLOYEE_TIMESHEET_REPORT: "view_all_employee_timesheet_report",
    VIEW_ALL_EMPLOYEE_CLOCK_IN_REPORT: "view_all_employee_clock_in_report",
    VIEW_ALL_EMPLOYEE_PROJECT_REPORT: "view_all_employee_project_report",
    VIEW_ALL_EMPLOYEE_PROJECT_COSTING_REPORT:
      "view_all_employee_project_costing_report",
    MANAGE_ALL_EMPLOYEE_TIMESHEET_REPORT:
      "manage_all_employee_timesheet_report",
  },
  PAYROLL: {
    VIEW: "view_payroll",
    MANAGE: "manage_payroll",
  },
  COST: {
    VIEW: "view_cost",
  },
  EMAIL: {
    MANAGE: "manage_email",
  },
  MIS: {
    ADD_MIS_REPORT: "add_mis_report",
    ACTION_ON_MIS_REPORT: "action_on_mis_report",
    VIEW_MY_FLAG: "view_my_flag",
    ACTION_ON_MY_FLAG: "action_on_my_flag",
    CREATE_AND_MANAGE_BUSINESS_KPIS: "create_and_manage_business_kpis",
  },
}

// Helper function to get all permissions as flat array
export const getAllPermissions = () => {
  const permissions: Array<{
    group_key: string
    permission_key: string
    label: string
    description: string
    group_name: string
  }> = []

  Object.keys(PERMISSIONS).forEach((groupKey) => {
    const group = PERMISSIONS[groupKey]
    Object.keys(group).forEach((permissionKey) => {
      const permissionValue = group[permissionKey]
      permissions.push({
        group_key: groupKey.toLowerCase(),
        permission_key: permissionValue,
        label: formatLabel(permissionValue),
        description: `Permission to ${formatLabel(permissionValue).toLowerCase()}`,
        group_name: formatGroupName(groupKey),
      })
    })
  })

  return permissions
}

// Helper function to format permission key to human readable label
const formatLabel = (permissionKey: string): string => {
  return permissionKey
    .split("_")
    .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
    .join(" ")
}

const formatGroupName = (permissionKey: string): string => {
  return permissionKey
    .toLowerCase() // convert FULL string to lowercase
    .split("_") // split by underscore
    .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) // Capitalize each
    .join(" ") // join with space
}

// Helper function to get permissions by group
export const getPermissionsByGroup = () => {
  const groupedPermissions: Record<
    string,
    Array<{ permission_key: string; label: string; description: string }>
  > = {}

  Object.keys(PERMISSIONS).forEach((groupKey) => {
    const group = PERMISSIONS[groupKey]
    const groupKeyLower = groupKey.toLowerCase()
    groupedPermissions[groupKeyLower] = []

    Object.keys(group).forEach((permissionKey) => {
      const permissionValue = group[permissionKey]
      groupedPermissions[groupKeyLower].push({
        permission_key: permissionValue,
        label: formatLabel(permissionValue),
        description: `Permission to ${formatLabel(permissionValue).toLowerCase()}`,
      })
    })
  })

  return groupedPermissions
}
