<?php

/**
 * Copyright 2024-2025 Simply.IN Sp. z o.o.
 *
 * NOTICE OF LICENSE
 *
 * Licensed under the EUPL-1.2 or later.
 * You may not use this work except in compliance with the Licence.
 *
 * Copy of the Licence is available at:
 * https://joinup.ec.europa.eu/software/page/eupl
 * It is bundled with this package in the file LICENSE.txt
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the Licence is distributed on an as is basis,
 * without warranties or conditions of any kind, either express or implied.
 * Check the Licence for the specific language governing permissions
 * and limitations under the License.
 *
 * @author   Simply.IN Sp. z o.o.
 * @copyright 2024-2025 Simply.IN Sp. z o.o.
 * @license   https://joinup.ec.europa.eu/software/page/eupl
 */

declare(strict_types=1);

namespace SimplyIn\Install;

use Db;
use Simplyin;
use SimplyInEmailCache;
use SimplyInOrder;
use SimplyInOrderSync;
use SimplyInPayments;
use SimplyInPoint;

if (!defined('_PS_VERSION_')) {
    exit;
}

final class UpgradeRunner
{
    public function run(Simplyin $module, string $version): bool
    {
        switch ($version) {
            case '2.0.2':
                SimplyInPayments::upgrade202();

                return true;

            case '1.3.0':
                (new Installer($module))->installOrderStates();
                SimplyInPayments::installSql();

                return true;

            case '1.2.9':
                $module->registerHook('paymentOptions');
                $module->registerHook('paymentReturn');

                return true;

            case '1.1.8':
                $module->registerHook('actionCustomerAccountUpdate');
                $module->registerHook('actionCustomerLogoutBefore');

                return true;

            case '1.1.3':
                SimplyInOrderSync::installSql();
                SimplyInEmailCache::installSql();

                return true;

            case '1.1.2':
                SimplyInOrder::installSql();

                return true;

            case '1.1.1':
                $module->registerHook('actionAdminOrdersTrackingNumberUpdate');

                return true;

            case '1.1.0':
                (new Uninstaller($module))->unregisterHooks();
                (new Installer($module))->registerHooks();
                SimplyInPoint::installSql();
                Db::getInstance()->execute('DROP TABLE IF EXISTS `' . _DB_PREFIX_ . 'simplyin`');

                return true;

            default:
                return true;
        }
    }
}
