<?php

namespace App\Models;

use App\Models\Enums\LibraryACL;
use App\Models\Scopes\CompanyScope;
use EloquentFilter\Filterable;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Auth;

/**
 * @method static \Illuminate\Database\Eloquent\Builder allowed()
 */
class Library extends Model
{
    use HasFactory, Filterable;

    protected $guarded = [
        'id'
    ];

    protected $casts = [
        'created_at' => 'datetime:Y-m-d H:i:s',
        'updated_at' => 'datetime:Y-m-d H:i:s',
    ];

    protected static function booted(): void
    {
        static::addGlobalScope(new CompanyScope);
    }

    public function scopeAllowed(Builder $query): void
    {
        $query->where(function (Builder $query) {
            return $query->where('acl', LibraryACL::PRIVATE->value)->where('created_by', Auth::id());
        })->orWhere(function (Builder $query) {
            return $query->where('acl', LibraryACL::CUSTOM->value)->where('whitelist', 'like', '%,' . Auth::id() . ',%');
        });
    }

    public function container(): \Illuminate\Database\Eloquent\Relations\HasMany
    {
        return $this->hasMany(Container::class, "library_id");
    }
}