<?php

namespace App\Models\Concerns;

use App\Models\User;
use Illuminate\Support\Facades\Auth;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Relations\BelongsTo;

/**
 * Trait pour les modèles qui ont un user_id (créateur de l'enregistrement).
 * Permet de filtrer les données selon le rôle :
 * - Responsable de magasin : voit uniquement ses enregistrements
 * - Administrateur / superAdministrateur : voit tout
 */
trait BelongsToUser
{
    public function createdBy(): BelongsTo
    {
        return $this->belongsTo(User::class, 'user_id');
    }

    /**
     * Scope pour filtrer selon le rôle de l'utilisateur connecté.
     * Responsable de magasin : uniquement ses enregistrements.
     * Admin / SuperAdmin : tous les enregistrements.
     */
    public function scopeForCurrentUser(Builder $query): Builder
    {
        $user = Auth::user();
        if (!$user) {
            return $query;
        }
        if ($user->isAdminOrSuperAdmin()) {
            return $query;
        }
        if ($user->isResponsableMagasin()) {
            return $query->where('user_id', $user->id);
        }

        return $query->where('user_id', $user->id);
    }

    /**
     * Enregistre automatiquement le user_id à la création si l'utilisateur est connecté.
     */
    protected static function bootBelongsToUser(): void
    {
        static::creating(function (Model $model) {
            if (auth()->check() && empty($model->user_id)) {
                $model->user_id = Auth::id();
            }
        });
    }
}
