<?php
declare(strict_types=1);

use Phinx\Migration\AbstractMigration;

final class TaskInc66849 extends AbstractMigration
{
    public function up(): void
    {
        $this->execute("CREATE TABLE manutencao.inc_66849_comerc_taxas_relacionadas AS
                               SELECT taxas_relacionadas.*
                                 FROM comercializacao.taxas_relacionadas
                                 JOIN comercializacao.taxas_valores
                                   ON taxas_valores.id = taxas_relacionadas.id_taxa
                                 JOIN comercializacao.taxas_agrupamento
                                   ON taxas_agrupamento.id = taxas_valores.id_taxa_agrupamento
                            LEFT JOIN seguro.propostas_taxas_agrupamento
                                   ON propostas_taxas_agrupamento.id_taxa_agrupamento = taxas_agrupamento.id
                                WHERE taxas_agrupamento.id_produto IN (1841, 1845)
                                  AND taxas_agrupamento.tp_taxa_agrupamento = 'C'
                                  AND propostas_taxas_agrupamento.id_taxa_agrupamento IS NULL
                                    ;
                      ");
        $this->execute("CREATE TABLE manutencao.inc_66849_comerc_taxas_valores AS
                               SELECT taxas_valores.*
                                 FROM comercializacao.taxas_valores
                                 JOIN comercializacao.taxas_agrupamento
                                   ON taxas_agrupamento.id = taxas_valores.id_taxa_agrupamento
                            LEFT JOIN seguro.propostas_taxas_agrupamento
                                   ON propostas_taxas_agrupamento.id_taxa_agrupamento = taxas_agrupamento.id
                                WHERE taxas_agrupamento.id_produto IN (1841, 1845)
                                  AND taxas_agrupamento.tp_taxa_agrupamento = 'C'
                                  AND propostas_taxas_agrupamento.id_taxa_agrupamento IS NULL
                                    ;
                      ");
        $this->execute("CREATE TABLE manutencao.inc_66849_comerc_taxas_agrupamento_car AS
                               SELECT taxas_agrupamento_car.*
                                 FROM comercializacao.taxas_agrupamento_car
                                 JOIN comercializacao.taxas_agrupamento
                                   ON taxas_agrupamento.id = taxas_agrupamento_car.id_taxa_agrupamento
                            LEFT JOIN seguro.propostas_taxas_agrupamento
                                   ON propostas_taxas_agrupamento.id_taxa_agrupamento = taxas_agrupamento.id
                                WHERE taxas_agrupamento.id_produto IN (1841, 1845)
                                  AND taxas_agrupamento.tp_taxa_agrupamento = 'C'
                                  AND propostas_taxas_agrupamento.id_taxa_agrupamento IS NULL
                                    ;
                      ");
        $this->execute("CREATE TABLE manutencao.inc_66849_comerc_taxas_agrupamento AS
                               SELECT taxas_agrupamento.*
                                 FROM comercializacao.taxas_agrupamento
                            LEFT JOIN seguro.propostas_taxas_agrupamento
                                   ON propostas_taxas_agrupamento.id_taxa_agrupamento = taxas_agrupamento.id
                                WHERE taxas_agrupamento.id_produto IN (1841, 1845)
                                  AND taxas_agrupamento.tp_taxa_agrupamento = 'C'
                                  AND propostas_taxas_agrupamento.id_taxa_agrupamento IS NULL
                                    ;
                      ");

        $this->execute(" DELETE FROM comercializacao.taxas_relacionadas WHERE id_taxa IN (
                               SELECT taxas_valores.id
                                 FROM comercializacao.taxas_valores
                                 JOIN comercializacao.taxas_agrupamento 
                                   ON taxas_agrupamento.id = taxas_valores.id_taxa_agrupamento
                            LEFT JOIN seguro.propostas_taxas_agrupamento
                                   ON propostas_taxas_agrupamento.id_taxa_agrupamento = taxas_agrupamento.id
                                WHERE taxas_agrupamento.id_produto IN (1841, 1845)
                                  AND taxas_agrupamento.tp_taxa_agrupamento = 'C'
                                  AND propostas_taxas_agrupamento.id_taxa_agrupamento IS NULL
                                    );
                      ");
        $this->execute(" DELETE FROM comercializacao.taxas_valores WHERE id_taxa_agrupamento IN (
                                SELECT taxas_agrupamento.id
                                  FROM comercializacao.taxas_agrupamento
                             LEFT JOIN seguro.propostas_taxas_agrupamento
                                    ON propostas_taxas_agrupamento.id_taxa_agrupamento = taxas_agrupamento.id
                            INNER JOIN comercializacao.taxas_agrupamento_car
                                    ON taxas_agrupamento_car.id_taxa_agrupamento = taxas_agrupamento.id 
                                 WHERE taxas_agrupamento.id_produto IN (1841, 1845)
                                   AND taxas_agrupamento.tp_taxa_agrupamento = 'C'
                                   AND propostas_taxas_agrupamento.id_taxa_agrupamento IS NULL
                                     );
                      ");
        $this->execute(" DELETE FROM comercializacao.taxas_agrupamento_car WHERE id_taxa_agrupamento IN (
                               SELECT taxas_agrupamento.id
                                 FROM comercializacao.taxas_agrupamento
                            LEFT JOIN seguro.propostas_taxas_agrupamento
                                   ON propostas_taxas_agrupamento.id_taxa_agrupamento = taxas_agrupamento.id
                                WHERE taxas_agrupamento.id_produto IN (1841, 1845)
                                  AND taxas_agrupamento.tp_taxa_agrupamento = 'C'
                                  AND propostas_taxas_agrupamento.id_taxa_agrupamento IS NULL
                                    );
                      ");
        $this->execute(" DELETE FROM comercializacao.taxas_agrupamento
                               WHERE taxas_agrupamento.id_produto IN (1841, 1845)
                                 AND taxas_agrupamento.tp_taxa_agrupamento = 'C'
                                 AND taxas_agrupamento.id NOT IN (SELECT propostas_taxas_agrupamento.id_taxa_agrupamento
                                                                    FROM seguro.propostas_taxas_agrupamento
                                                                    JOIN comercializacao.taxas_agrupamento
                                                                      ON taxas_agrupamento.id = propostas_taxas_agrupamento.id_taxa_agrupamento
                                                                   WHERE taxas_agrupamento.id_produto IN (1841, 1845)
                                                                     AND taxas_agrupamento.tp_taxa_agrupamento = 'C'
                                                                 );
                      ");
    }

    public function down(): void
    {
        $this->execute("INSERT INTO comercializacao.taxas_agrupamento
                            SELECT * FROM manutencao.inc_66849_comerc_taxas_agrupamento;
                      ");
        $this->execute("INSERT INTO comercializacao.taxas_agrupamento_car
                            SELECT * FROM manutencao.inc_66849_comerc_taxas_agrupamento_car;
                     ");
        $this->execute("INSERT INTO comercializacao.taxas_valores
                              SELECT * FROM manutencao.inc_66849_comerc_taxas_valores
                        ");
        $this->execute("INSERT INTO comercializacao.taxas_relacionadas
                              SELECT * FROM manutencao.inc_66849_comerc_taxas_relacionadas;
                       ");
    }
}
