<?php
/**
 * Created by IntelliJ IDEA.
 * User: kelyliang
 * Date: 2024/8/13
 * Time: 上午 10:36
 */

namespace App\Services\User;


use App\Models\Department;
use App\Models\User;
use Illuminate\Support\Facades\Auth;
use function Nette\Utils\isEmpty;

class UserService
{
    public function getUserList(array $whitelistDepartment = [],array $whitelistUser =[]){

        $departmentsCount = Department::where("company_id", Auth::user()->company_id)->whereIn('id', $whitelistDepartment)->count();
        if ($departmentsCount != count($whitelistDepartment)) {
            throw_validation_if("The selected department is invalid.");
        }

        $departmentUserIds =[];
        if(!empty($whitelistDepartment)){
            $departmentUserIds=User::query()->whereIn('department_id',$whitelistDepartment)->pluck('id')->toArray();
        }

        $users= User::where("company_id", Auth::user()->company_id)->whereIn('id', $whitelistUser);
        $userIds=[];
        if ($users->count()!= count($whitelistUser)) {
            throw_validation_if("The selected user is invalid.");
        }
        $userIds=$users->pluck('id')->toArray();

        // 合并两个数组并去重
        $allUserIds = array_merge($departmentUserIds, $userIds);
        $uniqueUserIds = array_unique($allUserIds);

        return $uniqueUserIds;

    }

    public function decomposeWhitelist(array $whitelist =[]){
        $departmentIds=[];
        if(!empty($whitelist)){
            $departmentIds=User::query()->whereIn('id',$whitelist)->pluck('department_id')->unique()->toArray();
        }

        return [
            'departmentIds' => $departmentIds,
            'userIds' => $whitelist,
        ];
    }

    public static function clearCache(): void
    {
        $user = Auth::user();
        $cacheKey = '4s_token_' . $user->username;
        cache()->forget($cacheKey);
    }
}