import { MigrationInterface, QueryRunner } from "typeorm";

export class ModifyCityBlockAndAsn1744292803939 implements MigrationInterface {
    name = 'ModifyCityBlockAndAsn1744292803939'

    public async up(queryRunner: QueryRunner): Promise<void> {
        await queryRunner.query(`ALTER TABLE \`city_block_ipv4\` ADD \`prefix_len\` int NOT NULL DEFAULT '32'`);
        await queryRunner.query(`ALTER TABLE \`city_block_ipv6\` ADD \`prefix_len\` int NOT NULL`);
        await queryRunner.query(`ALTER TABLE \`asn_data\` ADD \`start_ip_num\` bigint UNSIGNED NULL`);
        await queryRunner.query(`ALTER TABLE \`asn_data\` ADD \`end_ip_num\` bigint UNSIGNED NULL`);
        await queryRunner.query(`ALTER TABLE \`asn_data\` ADD \`start_ip_bin\` varbinary(16) NULL`);
        await queryRunner.query(`ALTER TABLE \`asn_data\` ADD \`end_ip_bin\` varbinary(16) NULL`);
        await queryRunner.query(`DROP INDEX \`IDX_35f7274b5aa5e55b4ad7f734b7\` ON \`city_block_ipv4\``);
        await queryRunner.query(`ALTER TABLE \`city_block_ipv4\` DROP COLUMN \`network\``);
        await queryRunner.query(`ALTER TABLE \`city_block_ipv4\` ADD \`network\` int UNSIGNED NOT NULL`);
        await queryRunner.query(`DROP INDEX \`IDX_8fa451946cbfc66d1494b055e8\` ON \`city_block_ipv6\``);
        await queryRunner.query(`ALTER TABLE \`city_block_ipv6\` DROP COLUMN \`network\``);
        await queryRunner.query(`ALTER TABLE \`city_block_ipv6\` ADD \`network\` varbinary(16) NOT NULL`);
        await queryRunner.query(`CREATE INDEX \`IDX_35f7274b5aa5e55b4ad7f734b7\` ON \`city_block_ipv4\` (\`network\`)`);
        await queryRunner.query(`CREATE INDEX \`IDX_8fa451946cbfc66d1494b055e8\` ON \`city_block_ipv6\` (\`network\`)`);
    }

    public async down(queryRunner: QueryRunner): Promise<void> {
        await queryRunner.query(`DROP INDEX \`IDX_8fa451946cbfc66d1494b055e8\` ON \`city_block_ipv6\``);
        await queryRunner.query(`DROP INDEX \`IDX_35f7274b5aa5e55b4ad7f734b7\` ON \`city_block_ipv4\``);
        await queryRunner.query(`ALTER TABLE \`city_block_ipv6\` DROP COLUMN \`network\``);
        await queryRunner.query(`ALTER TABLE \`city_block_ipv6\` ADD \`network\` varchar(50) COLLATE "utf8mb4_bin" NOT NULL`);
        await queryRunner.query(`CREATE INDEX \`IDX_8fa451946cbfc66d1494b055e8\` ON \`city_block_ipv6\` (\`network\`)`);
        await queryRunner.query(`ALTER TABLE \`city_block_ipv4\` DROP COLUMN \`network\``);
        await queryRunner.query(`ALTER TABLE \`city_block_ipv4\` ADD \`network\` varchar(255) NOT NULL`);
        await queryRunner.query(`CREATE INDEX \`IDX_35f7274b5aa5e55b4ad7f734b7\` ON \`city_block_ipv4\` (\`network\`)`);
        await queryRunner.query(`ALTER TABLE \`asn_data\` DROP COLUMN \`end_ip_bin\``);
        await queryRunner.query(`ALTER TABLE \`asn_data\` DROP COLUMN \`start_ip_bin\``);
        await queryRunner.query(`ALTER TABLE \`asn_data\` DROP COLUMN \`end_ip_num\``);
        await queryRunner.query(`ALTER TABLE \`asn_data\` DROP COLUMN \`start_ip_num\``);
        await queryRunner.query(`ALTER TABLE \`city_block_ipv6\` DROP COLUMN \`prefix_len\``);
        await queryRunner.query(`ALTER TABLE \`city_block_ipv4\` DROP COLUMN \`prefix_len\``);
    }

}
