<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class Task2302271710 extends AbstractMigration
{
    public function up(): void
    {
        $propostasBeneficiarios = $this->getPropostaBeneficiario();
        foreach ($propostasBeneficiarios as $propostaBeneficiario) {
            
            $query = $this->query("
                SELECT pr.id
                  FROM seguro.propostas_beneficiarios pb
                  JOIN seguro.propostas pr ON pr.id = pb.id_proposta
                 WHERE seguro.nr_endosso(pr.id, pr.id_endosso) <> 0 
                   AND pb.fl_favorecido_autorizacao_credito IS false
                   AND pr.id_proposta_mae = {$propostaBeneficiario['id']}
                   AND pb.nr_cpf_cnpj = '{$propostaBeneficiario['nr_cpf_cnpj']}';
            ");
            $rows = $query->fetchAll();
            
            foreach ($rows as $row) {
                $this->execute("UPDATE seguro.propostas_beneficiarios SET fl_favorecido_autorizacao_credito = 't' WHERE id_proposta = {$row['id']} AND nr_cpf_cnpj = '{$propostaBeneficiario['nr_cpf_cnpj']}';");
            }
        }
    }

    public function down(): void
    {
        $propostasBeneficiarios = $this->getPropostaBeneficiario();
        foreach ($propostasBeneficiarios as $propostaBeneficiario) {
            $query = $this->query("
                SELECT pr.id
                FROM seguro.propostas_beneficiarios pb
                JOIN seguro.propostas pr ON pr.id = pb.id_proposta
               WHERE seguro.nr_endosso(pr.id, pr.id_endosso) <> 0 
                 AND pb.fl_favorecido_autorizacao_credito IS true
                 AND pr.id_proposta_mae = {$propostaBeneficiario['id']}
                 AND pb.nr_cpf_cnpj = '{$propostaBeneficiario['nr_cpf_cnpj']}';
            ");
            $rows = $query->fetchAll();
            
            foreach ($rows as $row) {
                $this->execute("UPDATE seguro.propostas_beneficiarios SET fl_favorecido_autorizacao_credito = 'f' WHERE id_proposta = {$row['id']} AND nr_cpf_cnpj = '{$propostaBeneficiario['nr_cpf_cnpj']}';");
            }
        }
    }

    private function getPropostaBeneficiario(): array
    {
        $query = $this->query("
            SELECT pr.id, pb.nr_cpf_cnpj
              FROM seguro.propostas_beneficiarios pb
              JOIN seguro.propostas pr ON pr.id = pb.id_proposta
             WHERE seguro.nr_endosso(pr.id, pr.id_endosso) = 0 
               AND pb.fl_favorecido_autorizacao_credito IS true;
        ");
        $rows = $query->fetchAll();

        return $rows;
    }
}
