<?php

namespace App\Helpers;

use Illuminate\Support\Facades\DB;

class AccessLevelHelper
{
  public static function getDefaultAccessGroups () {
    $access_groups = [];
    $positions = DB::table('position')->select()->join('has_access', 'position_id', '=', 'fk_position')->get();

    foreach ($positions as $position) {
      $jobs = DB::table('job')->select()->where('job_id', $position->fk_job)->get();
      foreach ($jobs as $job) {
        if (isset($access_groups[$job->job_short_value])) {
          array_push($access_groups[$job->job_short_value], $position->fk_access_group);
        } else {
          $access_groups[$job->job_short_value][0] = $position->fk_access_group;
        }
      }
    }
    return $access_groups;
  }

  public static function hasAccessToJob($job, $permissions)
  {
    return in_array($job, $permissions);
  }

  public static function isJobValid($job)
  {
    $default_access_groups = self::getDefaultAccessGroups();
    foreach ($default_access_groups as $access_job => $access) {
      if ($access_job == $job) {
        return true;
      }
    }
    return false;
  }

  public static function hasPermittedRole($user_role, $wanted_role)
  {
    return $user_role == $wanted_role;
  }

  public static function getUserAccess($user_groups)
  {
    $default_access_groups = self::getDefaultAccessGroups();
    $user_alloweds = [];
    $user_groups_array = explode(',', $user_groups);

    if (self::isResponsible($user_groups_array)) {
      $user_role = 'responsable';
      foreach ($default_access_groups as $group => $accesses) {
        array_push($user_alloweds, $group);
      }
    }
    else {
      $user_role = 'formateur';
      foreach ($default_access_groups as $group => $accesses) {
        foreach ($accesses as $access) {
          if ((in_array($access, $user_groups_array))) {
            array_push($user_alloweds, $group);
          }
        }
      }
    }
    return ["groups" => array_unique($user_alloweds), "role" => $user_role];
  }

  public static function isResponsible($user_groups)
  {
    $responsible_default_group = 'apprentis-informaticiens';
    // $responsible_default_group = 'responsables-apprentis';
    return in_array($responsible_default_group, $user_groups);
  }
}