<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class DnsRecordChange extends Model
{
    use HasFactory;

    protected $fillable = [
        'dns_record_id',
        'dns_zone_id',
        'user_id',
        'ip_address',
        'action',
        'record_name',
        'record_type',
        'old_values',
        'new_values',
        'description',
    ];

    protected function casts(): array
    {
        return [
            'old_values' => 'array',
            'new_values' => 'array',
        ];
    }

    /**
     * Relația cu înregistrarea DNS
     */
    public function dnsRecord()
    {
        return $this->belongsTo(DnsRecord::class);
    }

    /**
     * Relația cu zona DNS
     */
    public function dnsZone()
    {
        return $this->belongsTo(DnsZone::class);
    }

    /**
     * Relația cu utilizatorul care a făcut modificarea
     */
    public function user()
    {
        return $this->belongsTo(User::class);
    }

    /**
     * Obține descrierea acțiunii în română
     */
    public function getActionDescriptionAttribute(): string
    {
        return match($this->action) {
            'create' => 'Creare înregistrare',
            'update' => 'Actualizare înregistrare',
            'delete' => 'Ștergere înregistrare',
            'toggle_status' => 'Schimbare status',
            'restore' => 'Restaurare înregistrare',
            default => 'Acțiune necunoscută',
        };
    }

    /**
     * Obține badge-ul de culoare pentru acțiune
     */
    public function getActionBadgeClassAttribute(): string
    {
        return match($this->action) {
            'create' => 'bg-green-50 dark:bg-green-900/20 text-green-700 dark:text-green-300 border-green-200 dark:border-green-800',
            'update' => 'bg-blue-50 dark:bg-blue-900/20 text-blue-700 dark:text-blue-300 border-blue-200 dark:border-blue-800',
            'delete' => 'bg-red-50 dark:bg-red-900/20 text-red-700 dark:text-red-300 border-red-200 dark:border-red-800',
            'toggle_status' => 'bg-orange-50 dark:bg-orange-900/20 text-orange-700 dark:text-orange-300 border-orange-200 dark:border-orange-800',
            'restore' => 'bg-indigo-50 dark:bg-indigo-900/20 text-indigo-700 dark:text-indigo-300 border-indigo-200 dark:border-indigo-800',
            default => 'bg-gray-50 dark:bg-gray-900/50 text-gray-700 dark:text-gray-300 border-gray-200 dark:border-gray-700',
        };
    }
}
