<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Support\Str;

class Convenio extends Model
{
    use HasFactory;

    protected $primaryKey = 'id';

    public $incrementing = false;

    protected $keyType = 'string';

    protected $fillable = [
        'status_plataforma',
        'executor_ordenador',
        'programa',
        'programa_pac',
        'tipo_programa',
        'proposta_id',
        'numero_instrumento',
        'numero_processo_sei',
        'data_recebimento_recurso',
        'data_assinatura_instrumento',
        'andamento',
        'vigencia_clausula_suspensiva',
        'vigencia_prazo_contratual',
        'objeto',
        'prazo_cadastro',
        'data',
        'local',
        'contrapartida',
        'repasse',
        'valor_global',
        'concedente',
        'prazo_execucao_meses',
        'porcentagem_conclusao',
        'status',
        'show_status_plataforma',
        'show_executor_ordenador',
        'show_programa',
        'show_programa_pac',
        'show_tipo_programa',
        'show_proposta_id',
        'show_numero_instrumento',
        'show_numero_processo_sei',
        'show_data_recebimento_recurso',
        'show_data_assinatura_instrumento',
        'show_andamento',
        'show_vigencia_clausula_suspensiva',
        'show_vigencia_prazo_contratual',
        'show_objeto',
        'show_prazo_cadastro',
        'show_data',
        'show_local',
        'show_contrapartida',
        'show_repasse',
        'show_valor_global',
        'show_concedente',
        'show_prazo_execucao_meses',
        'show_porcentagem_conclusao',
        'show_status',
    ];

    protected $casts = [
        'prazo_cadastro' => 'date',
        'data' => 'date',
        'data_recebimento_recurso' => 'date',
        'data_assinatura_instrumento' => 'date',
        'vigencia_clausula_suspensiva' => 'date',
        'vigencia_prazo_contratual' => 'date',
        'show_objeto' => 'boolean',
        'show_executor_ordenador' => 'boolean',
        'show_concedente' => 'boolean',
        'show_status_plataforma' => 'boolean',
        'show_programa' => 'boolean',
        'show_programa_pac' => 'boolean',
        'show_tipo_programa' => 'boolean',
        'show_proposta_id' => 'boolean',
        'show_numero_instrumento' => 'boolean',
        'show_numero_processo_sei' => 'boolean',
        'show_data_recebimento_recurso' => 'boolean',
        'show_data_assinatura_instrumento' => 'boolean',
        'show_andamento' => 'boolean',
        'show_vigencia_clausula_suspensiva' => 'boolean',
        'show_vigencia_prazo_contratual' => 'boolean',
        'show_porcentagem_conclusao' => 'boolean',
        'show_prazo_cadastro' => 'boolean',
        'show_data' => 'boolean',
        'show_prazo_execucao_meses' => 'boolean',
        'show_local' => 'boolean',
        'show_contrapartida' => 'boolean',
        'show_repasse' => 'boolean',
        'show_valor_global' => 'boolean',
    ];

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

    protected static function boot()
    {
        parent::boot();

        static::creating(function ($model) {
            if (empty($model->id)) {
                $model->id = (string) Str::uuid();
            }
        });
    }
}
