<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class TaskInc45303 extends AbstractMigration
{
    public function up(): void
    {
        $rs = $this->fetchAll(<<<SQL
            SELECT
                spc.id_proposta,
                spc2.vl_franquia
            FROM
                comercializacao.taxas_agrupamento cta
            INNER JOIN seguro.propostas_taxas_agrupamento spta
                ON spta.id_taxa_agrupamento = cta.id
            INNER JOIN seguro.propostas_coberturas spc
                ON spc.id_proposta = spta.id_proposta
            INNER JOIN seguro.propostas_coberturas spc2
                ON spc2.id_proposta = spc.id_proposta
                    AND spc2.fl_principal IS TRUE
            WHERE
                cta.tp_taxa_agrupamento = 'C'
                AND spc.vl_franquia IS NULL;
SQL
);
    $map = [];
    foreach ($rs as $row) {
        if (!empty($map[$row['id_proposta']])) {
            continue;
        }

        $this->execute(<<<SQL
            UPDATE seguro.propostas_coberturas SET vl_franquia = {$row['vl_franquia']} 
                WHERE id_proposta = {$row['id_proposta']} AND fl_principal IS FALSE;
SQL
);
        $map[$row['id_proposta']] = true;
    }
}

    public function down(): void
    {
        $this->execute(<<<SQL
            UPDATE seguro.propostas_coberturas SET vl_franquia = NULL 
            WHERE id_proposta IN (
                SELECT
                    spc.id_proposta
                FROM
                    comercializacao.taxas_agrupamento cta
                INNER JOIN seguro.propostas_taxas_agrupamento spta
                    ON spta.id_taxa_agrupamento = cta.id
                INNER JOIN seguro.propostas_coberturas spc
                    ON spc.id_proposta = spta.id_proposta
                WHERE
                    cta.tp_taxa_agrupamento = 'C'
                    AND spc.fl_principal IS FALSE
            );
SQL
);
    }
}
