<?php

namespace App\Models;

use App\Support\Concerns\InteractsWithODataTypes;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;

class Policy extends Model
{
    use HasFactory;
    use InteractsWithODataTypes;

    protected $guarded = [];

    protected $casts = [
        'metadata' => 'array',
        'last_synced_at' => 'datetime',
        'ignored_at' => 'datetime',
    ];

    public function tenant(): BelongsTo
    {
        return $this->belongsTo(Tenant::class);
    }

    public function versions(): HasMany
    {
        return $this->hasMany(PolicyVersion::class);
    }

    public function backupItems(): HasMany
    {
        return $this->hasMany(BackupItem::class);
    }

    public function scopeActive($query)
    {
        return $query->whereNull('ignored_at');
    }

    public function scopeIgnored($query)
    {
        return $query->whereNotNull('ignored_at');
    }

    public function ignore(): void
    {
        $this->update(['ignored_at' => now()]);
    }

    public function unignore(): void
    {
        $this->update(['ignored_at' => null]);
    }
}
