<?php

namespace App\Models;

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

class Ppp extends Model
{
    use HasFactory;

    protected $table = 'ppps';

    public $incrementing = false;
    protected $keyType = 'string';

    protected $fillable = [

        // ================= DADOS PRINCIPAIS =================
        'projeto',
        'criterio_julgamento',
        'empresa',
        'prazo_concessao',
        'secretaria_responsavel',
        'andamento',
        'proxima_etapa',
        'porcentagem_conclusao',
        'prazo_implantacao',
        'outorga_fixa',
        'outorga_variavel',
        'investimento_total',
        'aporte_municipio',
        'contraprestacao_mensal',
        'obrigacao',
        'payback',
        'capex',
        'opex',
        'tir',
        'valor_estimado_contrato',
        'observacoes',
        'status',

        // ================= TOGGLES =================
        'show_projeto',
        'show_criterio_julgamento',
        'show_empresa',
        'show_prazo_concessao',
        'show_secretaria_responsavel',
        'show_andamento',
        'show_proxima_etapa',
        'show_porcentagem_conclusao',
        'show_prazo_implantacao',
        'show_outorga_fixa',
        'show_outorga_variavel',
        'show_investimento_total',
        'show_aporte_municipio',
        'show_contraprestacao_mensal',
        'show_obrigacao',
        'show_payback',
        'show_capex',
        'show_opex',
        'show_tir',
        'show_valor_estimado_contrato',
        'show_observacoes',
    ];

    protected $casts = [

        // ================= BOOLEAN CAST =================
        'show_projeto' => 'boolean',
        'show_criterio_julgamento' => 'boolean',
        'show_empresa' => 'boolean',
        'show_prazo_concessao' => 'boolean',
        'show_secretaria_responsavel' => 'boolean',
        'show_andamento' => 'boolean',
        'show_proxima_etapa' => 'boolean',
        'show_porcentagem_conclusao' => 'boolean',
        'show_prazo_implantacao' => 'boolean',
        'show_outorga_fixa' => 'boolean',
        'show_outorga_variavel' => 'boolean',
        'show_investimento_total' => 'boolean',
        'show_aporte_municipio' => 'boolean',
        'show_contraprestacao_mensal' => 'boolean',
        'show_obrigacao' => 'boolean',
        'show_payback' => 'boolean',
        'show_capex' => 'boolean',
        'show_opex' => 'boolean',
        'show_tir' => 'boolean',
        'show_valor_estimado_contrato' => 'boolean',
        'show_observacoes' => 'boolean',
    ];

    public function historicos()
    {
        return $this->hasMany(PppHistorico::class, 'ppp_id', 'id')->orderByDesc('data')->orderByDesc('id');
    }

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

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

            if (empty($model->status)) {
                $model->status = 'ATIVADO';
            }
        });

        static::saving(function ($model) {
            $map = [
                'Autorização do CGP' => 15,
                'Estudo' => 30,
                'Consulta Pública' => 45,
                'Edital' => 60,
                'Envio ao TCE' => 75,
                'Sessão Pública' => 90,
                'Contrato' => 100,
            ];
            if (array_key_exists($model->andamento, $map)) {
                $model->porcentagem_conclusao = $map[$model->andamento];
            } else {
                $model->porcentagem_conclusao = 0;
            }
        });
    }
}