<?php

class InstansiUnitKerjaSPIMigration_479 extends \Phalcon\Mvc\Model\Migration {
    public function up()
    {
        $this->down();

        //Tambah `parent_id` untuk Unit Kerja Kementerian
        self::$connection->execute("
            ALTER TABLE jaga.instansi
                ADD COLUMN IF NOT EXISTS parent_id bigint;
        ");

        //Tambah Instansi Tipe "Unit Kerja Kementerian"
        self::$connection->execute("
            INSERT INTO jaga.instansi_tipe (nama, stranas_filter) VALUES('Unit Kerja Kementerian', false);
        ");

        //Update existing Unit Kerja ke tipe instansi baru
        self::$connection->execute("
            UPDATE jaga.instansi 
            SET id_tipe = jaga.instansi_tipe.id
            FROM jaga.instansi_tipe
            WHERE jaga.instansi_tipe.nama = 'Unit Kerja Kementerian'
                AND jaga.instansi.nama IN ('Badan Kebijakan Fiskal Kementerian Keuangan','Inspektorat Jenderal Kementerian Keuangan','Lembaga National Single Window Kementerian Keuangan','Sekretariat Jenderal Kementerian Keuangan','Badan Pendidikan dan Pelatihan Keuangan Kementerian Keuangan','Direktorat Jenderal Anggaran Kementerian Keuangan','Direktorat Jenderal Kekayaan Negara Kementerian Keuangan','Direktorat Jenderal Pajak Kementerian Keuangan','Direktorat Jenderal Pengelolaan Pembiayaan dan Risiko Kementerian Keuangan','Direktorat Jenderal Perbendaharaan Kementerian Keuangan','Direktorat Jenderal Bea Cukai Kementerian Keuangan','Direktorat Jenderal Perimbangan Keuangan Kementerian Keuangan','Badan Pengembangan Sumber Daya Manusia Kementerian PUPR','Direktorat Jenderal Bina Konstruksi Kementerian PUPR','Direktorat Jenderal Bina Marga Kementerian PUPR','Direktorat Jenderal Cipta Karya Kementerian PUPR','Direktorat Jenderal Pembiayaan Infrastruktur Kementerian PUPR','Direktorat Jenderal Perumahan Kementerian PUPR','Direktorat Jenderal Sumber Daya Air Kementerian PUPR','Inspektorat Jenderal Kementerian PUPR');
        ");

        //Update parent id dari existing Unit Kerja Kementerian Keuangan
        self::$connection->execute("
            UPDATE jaga.instansi ins1 
            SET parent_id = ins2.id
            FROM jaga.instansi ins2
            WHERE ins2.nama ILIKE 'Kementerian Keuangan'
                AND ins1.nama ILIKE '%Kementerian Keuangan'
                AND ins1.id_tipe = (SELECT id FROM jaga.instansi_tipe WHERE nama = 'Unit Kerja Kementerian')
                AND ins2.deleted_at IS NULL
            ;
        ");

        //Update parent id dari existing Unit Kerja Kementerian PUPR
        self::$connection->execute("
            UPDATE jaga.instansi ins1 
            SET parent_id = ins2.id
            FROM jaga.instansi ins2
            WHERE ins2.nama ILIKE 'Kementerian Pekerjaan Umum dan Perumahan Rakyat'
                AND ins1.nama ILIKE '% Kementerian PUPR'
                AND ins1.id_tipe = (SELECT id FROM jaga.instansi_tipe WHERE nama = 'Unit Kerja Kementerian')
                AND ins2.deleted_at IS NULL
            ;
        ");

        //Insert Instansi Baru
        $sql = file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . 'insert_new_instansi_unit_kerja.sql');
        self::$connection->execute($sql);

        //Update Parent ID
        $sql = file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . 'update_instansi_unit_kerja_parent_id.sql');
        self::$connection->execute($sql);

        //Mapping kode dengan id instansi
        $sql = file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . 'mapping_id_instansi_unit_kerja.sql');
        self::$connection->execute($sql);
    }

    public function down()
    {
        self::$connection->execute("
            DELETE FROM jaga.spi_mon_mapping_instansi WHERE nama_instansi IN ('Badan Litbang Dan Diklat Kementerian Agama','Inspektorat Jenderal Kementerian Agama','Kantor Wilayah Kementerian Agama Kementerian Agama','Badan Penyelenggara Jaminan Produk Halal Kementerian Agama','Direktorat Jenderal Bimas Katolik Kementerian Agama','Direktorat Jenderal Bimas Hindu Kementerian Agama','Direktorat Jenderal Bimas Buddha Kementerian Agama','Sekretariat Jenderal Kementerian Agama','Direktorat Jenderal Bimas Kristen Kementerian Agama','Direktorat Jenderal Pemasyarakatan Kemenkumham','Inspektorat Jenderal Kemenkumham','Direktorat Jenderal Hak Asasi Manusia Kemenkumham','Sekretariat Jenderal Kemenkumham','Direktorat Jenderal Administrasi Hukum Umum Kemenkumham','Direktorat Jenderal Peraturan Perundang-Undangan Kemenkumham','Badan Strategi Kebijakan Hukum Dan Ham Kemenkumham','Badan Pembinaan Hukum Nasional Kemenkumham','Direktorat Jenderal Imigrasi Kemenkumham','Badan Pengembangan Sumber Daya Manusia Hukum Dan Hak Asasi Manusia Kemenkumham','Direktorat Jenderal Kekayaan Intelektual Kemenkumham','Direktorat Jenderal Pencegahan Dan Pengendalian Penyakit Kementerian Kesehatan','Direktorat Jenderal Pelayanan Kesehatan Kementerian Kesehatan','Direktorat Jenderal Tenaga Kesehatan Kementerian Kesehatan','Sekretariat Jenderal Kementerian Kesehatan','Badan Kebijakan Pembangunan Kesehatan Kementerian Kesehatan','Direktorat Jenderal Kesehatan Masyarakat Kementerian Kesehatan','Direktorat Jenderal Kefarmasian Dan Alat Kesehatan Kementerian Kesehatan','Inspektorat Jenderal Kementerian Kesehatan','Badan Geologi Kementerian ESDM','Badan Pengembangan Sumber Daya Manusia Energi Dan Sumber Daya Mineral Kementerian ESDM','Direktorat Jenderal Mineral Dan Batubara Kementerian ESDM','Direktorat Jenderal Minyak Dan Gas Bumi Kementerian ESDM','Sekretariat Jenderal Kementerian ESDM','Direktorat Jenderal Ketenagalistrikan Kementerian ESDM','Direktorat Jenderal Energi Baru, Terbarukan, Dan Konservasi Energi Kementerian ESDM','Inspektorat Jenderal Kementerian ESDM','Direktorat Jenderal Perkeretaapian Kementerian Perhubungan','Direktorat Jenderal Perhubungan Darat Kementerian Perhubungan','Inspektorat Jenderal Kementerian Perhubungan','Badan Kebijakan Transportasi Kementerian Perhubungan','Bpsdm Perhubungan Kementerian Perhubungan','Bppsdmlhk KLHK','Ditjen Pskl KLHK','Direktorat Jenderal Pengendalian Pencemaran Dan Kerusakan Lingkungan KLHK','Inspektorat Jenderal KLHK','Direktorat Jenderal Planologi Kehutanan Dan Tata Lingkungan KLHK','Direktorat Jenderal Pengendalian Perubahan Iklim KLHK','Direktorat Jenderal Konservasi Sumber Daya Alam Ekosistem KLHK','Badan Standarisasi Instrumen Lingkungan Hidup Dan Kehutanan KLHK','Direktorat Jenderal Pengelolaan Hutan Lestari KLHK','Direktorat Jenderal Penegakkan Hukum Lingkungan Hidup Dan Kehutanan KLHK','Direktorat Jenderal Pengelolaan Sampah, Limbah Dan B3 KLHK','Reskrim Kepolisian Negara Republik Indonesia','Obvit Kepolisian Negara Republik Indonesia','Intel Kepolisian Negara Republik Indonesia','Sdm Kepolisian Negara Republik Indonesia','Lantas Kepolisian Negara Republik Indonesia','Spkt Kepolisian Negara Republik Indonesia','Binmas Kepolisian Negara Republik Indonesia','Pbj Kepolisian Negara Republik Indonesia','Kejaksaan Tinggi Kejaksaan Agung','Kejaksaan Negeri Kejaksaan Agung','Jaksa Agung Muda Bidang Intelijen Kejaksaan Agung','Jaksa Agung Muda Bidang Tindak Pidana Umum Kejaksaan Agung','Jaksa Agung Muda Bidang Perdata Dan Tata Usaha Negara Kejaksaan Agung','Jaksa Agung Muda Bidang Tindak Pidana Khusus Kejaksaan Agung');
            SELECT setval(pg_get_serial_sequence('spi_mon_mapping_instansi', 'id'), coalesce(max(id),0) + 1, false) FROM jaga.spi_mon_mapping_instansi;
        ");

        self::$connection->execute("
            DELETE FROM jaga.instansi WHERE nama IN ('Badan Litbang Dan Diklat Kementerian Agama','Inspektorat Jenderal Kementerian Agama','Kantor Wilayah Kementerian Agama Kementerian Agama','Badan Penyelenggara Jaminan Produk Halal Kementerian Agama','Direktorat Jenderal Bimas Katolik Kementerian Agama','Direktorat Jenderal Bimas Hindu Kementerian Agama','Direktorat Jenderal Bimas Buddha Kementerian Agama','Sekretariat Jenderal Kementerian Agama','Direktorat Jenderal Bimas Kristen Kementerian Agama','Direktorat Jenderal Pemasyarakatan Kemenkumham','Inspektorat Jenderal Kemenkumham','Direktorat Jenderal Hak Asasi Manusia Kemenkumham','Sekretariat Jenderal Kemenkumham','Direktorat Jenderal Administrasi Hukum Umum Kemenkumham','Direktorat Jenderal Peraturan Perundang-Undangan Kemenkumham','Badan Strategi Kebijakan Hukum Dan Ham Kemenkumham','Badan Pembinaan Hukum Nasional Kemenkumham','Direktorat Jenderal Imigrasi Kemenkumham','Badan Pengembangan Sumber Daya Manusia Hukum Dan Hak Asasi Manusia Kemenkumham','Direktorat Jenderal Kekayaan Intelektual Kemenkumham','Direktorat Jenderal Pencegahan Dan Pengendalian Penyakit Kementerian Kesehatan','Direktorat Jenderal Pelayanan Kesehatan Kementerian Kesehatan','Direktorat Jenderal Tenaga Kesehatan Kementerian Kesehatan','Sekretariat Jenderal Kementerian Kesehatan','Badan Kebijakan Pembangunan Kesehatan Kementerian Kesehatan','Direktorat Jenderal Kesehatan Masyarakat Kementerian Kesehatan','Direktorat Jenderal Kefarmasian Dan Alat Kesehatan Kementerian Kesehatan','Inspektorat Jenderal Kementerian Kesehatan','Badan Geologi Kementerian ESDM','Badan Pengembangan Sumber Daya Manusia Energi Dan Sumber Daya Mineral Kementerian ESDM','Direktorat Jenderal Mineral Dan Batubara Kementerian ESDM','Direktorat Jenderal Minyak Dan Gas Bumi Kementerian ESDM','Sekretariat Jenderal Kementerian ESDM','Direktorat Jenderal Ketenagalistrikan Kementerian ESDM','Direktorat Jenderal Energi Baru, Terbarukan, Dan Konservasi Energi Kementerian ESDM','Inspektorat Jenderal Kementerian ESDM','Direktorat Jenderal Perkeretaapian Kementerian Perhubungan','Direktorat Jenderal Perhubungan Darat Kementerian Perhubungan','Inspektorat Jenderal Kementerian Perhubungan','Badan Kebijakan Transportasi Kementerian Perhubungan','Bpsdm Perhubungan Kementerian Perhubungan','Bppsdmlhk KLHK','Ditjen Pskl KLHK','Direktorat Jenderal Pengendalian Pencemaran Dan Kerusakan Lingkungan KLHK','Inspektorat Jenderal KLHK','Direktorat Jenderal Planologi Kehutanan Dan Tata Lingkungan KLHK','Direktorat Jenderal Pengendalian Perubahan Iklim KLHK','Direktorat Jenderal Konservasi Sumber Daya Alam Ekosistem KLHK','Badan Standarisasi Instrumen Lingkungan Hidup Dan Kehutanan KLHK','Direktorat Jenderal Pengelolaan Hutan Lestari KLHK','Direktorat Jenderal Penegakkan Hukum Lingkungan Hidup Dan Kehutanan KLHK','Direktorat Jenderal Pengelolaan Sampah, Limbah Dan B3 KLHK','Reskrim Kepolisian Negara Republik Indonesia','Obvit Kepolisian Negara Republik Indonesia','Intel Kepolisian Negara Republik Indonesia','Sdm Kepolisian Negara Republik Indonesia','Lantas Kepolisian Negara Republik Indonesia','Spkt Kepolisian Negara Republik Indonesia','Binmas Kepolisian Negara Republik Indonesia','Pbj Kepolisian Negara Republik Indonesia','Kejaksaan Tinggi Kejaksaan Agung','Kejaksaan Negeri Kejaksaan Agung','Jaksa Agung Muda Bidang Intelijen Kejaksaan Agung','Jaksa Agung Muda Bidang Tindak Pidana Umum Kejaksaan Agung','Jaksa Agung Muda Bidang Perdata Dan Tata Usaha Negara Kejaksaan Agung','Jaksa Agung Muda Bidang Tindak Pidana Khusus Kejaksaan Agung');
            SELECT setval(pg_get_serial_sequence('instansi', 'id'), coalesce(max(id),0) + 1, false) FROM jaga.instansi;
        ");

        self::$connection->execute("
            DELETE FROM jaga.instansi_tipe WHERE nama = 'Unit Kerja Kementerian';
            SELECT setval(pg_get_serial_sequence('instansi_tipe', 'id'), coalesce(max(id),0) + 1, false) FROM jaga.instansi_tipe;
        ");

        self::$connection->execute("
            ALTER TABLE jaga.instansi
                DROP COLUMN IF EXISTS parent_id;
        ");
    }
}

