<?php
declare(strict_types=1);

namespace ShlinkMigrations;

use Doctrine\DBAL\Schema\Schema;
use Doctrine\DBAL\Schema\SchemaException;
use Doctrine\Migrations\AbstractMigration;

/**
 * Auto-generated Migration: Please modify to your needs!
 */
final class Version20180915110857 extends AbstractMigration
{
    private const ON_DELETE_MAP = [
        'visit_locations' => 'SET NULL',
        'short_urls' => 'CASCADE',
    ];

    /**
     * @param Schema $schema
     * @throws SchemaException
     */
    public function up(Schema $schema): void
    {
        $visits = $schema->getTable('visits');
        $foreignKeys = $visits->getForeignKeys();

        // Remove all existing foreign keys and add them again with CASCADE delete
        foreach ($foreignKeys as $foreignKey) {
            $visits->removeForeignKey($foreignKey->getName());
            $foreignTable = $foreignKey->getForeignTableName();

            $visits->addForeignKeyConstraint(
                $foreignTable,
                $foreignKey->getLocalColumns(),
                $foreignKey->getForeignColumns(),
                [
                    'onDelete' => self::ON_DELETE_MAP[$foreignTable],
                    'onUpdate' => 'RESTRICT',
                ]
            );
        }
    }

    public function down(Schema $schema): void
    {
        // Nothing to run
    }
}
