<?php

/*
 * This file is part of the Thelia package.
 * http://www.thelia.net
 *
 * (c) OpenStudio <info@thelia.net>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace TheliaLibrary;

use Propel\Runtime\Connection\ConnectionInterface;
use Symfony\Component\DependencyInjection\Loader\Configurator\ServicesConfigurator;
use Symfony\Component\Finder\Finder;
use Thelia\Install\Database;
use Thelia\Module\BaseModule;

class TheliaLibrary extends BaseModule
{
    /** @var string */
    public const DOMAIN_NAME = 'thelialibrary';

    public const DEFAULT_IMAGE_DIRECTORY = THELIA_LOCAL_DIR.'library/images/';

    public function preActivation(ConnectionInterface $con = null): bool
    {
        if (!$this->getConfigValue('is_initialized', false)) {
            $database = new Database($con);

            $database->insertSql(null, [__DIR__.'/Config/TheliaMain.sql']);

            $this->setConfigValue('is_initialized', true);
        }

        return true;
    }

    /**
     * Execute sql files in Config/update/ folder named with module version (ex: 1.0.1.sql).
     *
     * @param $currentVersion
     * @param $newVersion
     */
    public function update($currentVersion, $newVersion, ConnectionInterface $con = null): void
    {
        if (file_exists(__DIR__.DS.'Config'.DS.'update')) {
            $finder = Finder::create()
                ->name('*.sql')
                ->depth(0)
                ->sortByName()
                ->in(__DIR__.DS.'Config'.DS.'update');

            $database = new Database($con);

            /** @var \SplFileInfo $file */
            foreach ($finder as $file) {
                if (version_compare($currentVersion, $file->getBasename('.sql'), '<')) {
                    $database->insertSql(null, [$file->getPathname()]);
                }
            }
        }
    }

    public static function getImageDirectory(): string
    {
        return self::getConfigValue('image_directory', self::DEFAULT_IMAGE_DIRECTORY);
    }

    /*
     * You may now override BaseModuleInterface methods, such as:
     * install, destroy, preActivation, postActivation, preDeactivation, postDeactivation
     *
     * Have fun !
     */

    /**
     * Defines how services are loaded in your modules.
     */
    public static function configureServices(ServicesConfigurator $servicesConfigurator): void
    {
        $servicesConfigurator->load(self::getModuleCode().'\\', __DIR__)
            ->exclude([THELIA_MODULE_DIR.ucfirst(self::getModuleCode()).'/I18n/*'])
            ->autowire(true)
            ->autoconfigure(true);
    }
}
