<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Str;

class Proposta extends Model
{
    protected $fillable = [
        'token', 'razao_social', 'cnpj', 'email', 'telefone',
        'regime_tributario', 'honorario_calculado', 'honorario_final',
        'detalhes', 'observacoes', 'validade', 'status',
        'aceita_em', 'aceita_por_ip', 'user_id', 'lead_id',
    ];

    protected $casts = [
        'detalhes'   => 'array',
        'validade'   => 'date',
        'aceita_em'  => 'datetime',
        'honorario_calculado' => 'decimal:2',
        'honorario_final'     => 'decimal:2',
    ];

    protected static function boot()
    {
        parent::boot();
        static::creating(function ($proposta) {
            if (empty($proposta->token)) {
                $proposta->token = Str::random(48);
            }
        });
    }

    public function user()
    {
        return $this->belongsTo(User::class);
    }

    public function lead()
    {
        return $this->belongsTo(Lead::class);
    }

    public function contrato()
    {
        return $this->hasOne(Contrato::class);
    }

    public function isExpirada(): bool
    {
        return $this->validade->isPast() && $this->status === 'enviada';
    }

    public function aceitar(string $ip): void
    {
        $this->update(['status' => 'aceita', 'aceita_em' => now(), 'aceita_por_ip' => $ip]);
    }

    public function getStatusColorAttribute(): string
    {
        return match ($this->status) {
            'aceita'   => '#25b87e',
            'recusada' => '#dc2626',
            'expirada' => '#94a3b8',
            'enviada'  => '#2563eb',
            default    => '#d97706',
        };
    }

    public function getStatusBgAttribute(): string
    {
        return match ($this->status) {
            'aceita'   => '#ecfdf5',
            'recusada' => '#fef2f2',
            'expirada' => '#f1f5f9',
            'enviada'  => '#eff6ff',
            default    => '#fffbeb',
        };
    }
}
