<?php

namespace App\Providers;

use App\Enumerations\UserRole;
use Illuminate\Auth\EloquentUserProvider;

class TenantUserProvider extends EloquentUserProvider
{
    public function retrieveByCredentials(array $credentials)
    {
        $credentials['active'] = true;

        $query = $this->createModel()->newQuery();

        foreach ($credentials as $key => $value) {
            if (! str_contains($key, 'password')) {
                $query->where($key, $value);
            }
        }

        // Auf "lv" gilt grundsätzlich keine local_group-Einschränkung.
        if (app('tenant')->slug === 'lv') {
            return $query->first();
        }

        // Auf Sub-Tenants:
        //   - Entweder gehört der Nutzer zum aktuellen Tenant (local_group)
        //   - ODER er ist auf LV-Ebene Administrator
        //     -> "Bundesrecht steht über Landesrecht": Login überall möglich.
        $query->where('active', true)
            ->where(function ($q) {
                $q->where('local_group', app('tenant')->slug)
                  ->orWhere('user_role_main', UserRole::USER_ROLE_ADMIN);
            });

        return $query->first();
    }
}
