<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\App;
use App\Traits\Auditable;

class TermsAndConditions extends Model
{
    use HasFactory;
    use Auditable;
    
    protected $fillable = [
        'version',
        'title_es',
        'title_en',
        'content_es',
        'content_en',
        'is_active',
        'valid_from',
        'valid_until'
    ];
    
    protected $casts = [
        'is_active' => 'boolean',
        'valid_from' => 'datetime',
        'valid_until' => 'datetime',
    ];
    
    /**
     * Obtiene los usuarios que han aceptado estos términos y condiciones
     */
    public function users()
    {
        return $this->belongsToMany(User::class, 'user_terms', 'term_id', 'user_id')
                    ->withPivot('accepted', 'accepted_at', 'ip_address', 'user_agent')
                    ->withTimestamps();
    }
    
    /**
     * Obtiene los términos y condiciones activos más recientes
     */
    public static function getActive()
    {
        return self::where('is_active', true)
                   ->where('valid_from', '<=', now())
                   ->where(function($query) {
                       $query->whereNull('valid_until')
                             ->orWhere('valid_until', '>=', now());
                   })
                   ->latest('valid_from')
                   ->first();
    }
    
    /**
     * Obtiene el título según el idioma actual
     */
    public function getTitle()
    {
        $locale = App::getLocale();
        return $locale == 'es' ? $this->title_es : $this->title_en;
    }
    
    /**
     * Obtiene el contenido según el idioma actual
     */
    public function getContent()
    {
        $locale = App::getLocale();
        return $locale == 'es' ? $this->content_es : $this->content_en;
    }
}
