<?php
/**
 * 2007-2023 PrestaShop
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Academic Free License (AFL 3.0)
 * that is bundled with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://opensource.org/licenses/afl-3.0.php
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@prestashop.com so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade PrestaShop to newer
 * versions in the future. If you wish to customize PrestaShop for your
 * needs please refer to http://www.prestashop.com for more information.
 *
 *  @author    PrestaShop SA <contact@prestashop.com>
 *  @copyright 2007-2023 PrestaShop SA
 *  @license   http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
 *  International Registered Trademark & Property of PrestaShop SA
 */
declare(strict_types=1);

namespace PrestaShop\Module\AgileMultisellerPro\Form\Configuration\Membership;

use PrestaShop\PrestaShop\Core\Configuration\DataConfigurationInterface;
use PrestaShop\PrestaShop\Core\ConfigurationInterface;

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

final class DataConfiguration implements DataConfigurationInterface
{
    const MAX_CATEGORY_NBR = 1000;
    const TIMING_MANUAL = 0;
    const TIMING_NEW_CUSTOMER = 1;
    const TIMING_NEW_SELLER = 2;
    const TIMING_SELLER_APPROVAL = 3;

    private $configuration;

    public const AGILE_MEMBERSHIP_STATUS = 'AGILE_MEMBERSHIP_STATUS';
    public const AGILE_MEMBERSHIP_CID = 'AGILE_MEMBERSHIP_CID';
    public const AGILE_MEMBERSHIP_PAUSE_GRACEDAYS = 'AGILE_MEMBERSHIP_PAUSE_GRACEDAYS';
    public const AGILE_MEMBERSHIP_FREE_ONETIME_ONLY = 'AGILE_MEMBERSHIP_FREE_ONETIME_ONLY';
    public const AGILE_MEMBERSHIP_FREE_TRIAL_ID = 'AGILE_MEMBERSHIP_FREE_TRIAL_ID';
    public const AGILE_MEMBERSHIP_FREE_TRIAL_TIMING = 'AGILE_MEMBERSHIP_FREE_TRIAL_TIMING';
    public const AGILE_MEMBERSHIP_FREE_TRIAL_STATE = 'AGILE_MEMBERSHIP_FREE_TRIAL_STATE';
    public const AGILE_MEMBERSHIP_REMINDER_DAYS = 'AGILE_MEMBERSHIP_REMINDER_DAYS';

    public function __construct(ConfigurationInterface $configuration)
    {
        $this->configuration = $configuration;
    }

    public function getConfiguration(): array
    {
        $configs = [];

        $configs['membership_pause_gracedays'] = 0;
        $configs['membership_free_onetime_only'] = 1;
        $configs['membership_free_trial_timing'] = self::TIMING_NEW_SELLER;

        if ($membership_status = $this->configuration->get(static::AGILE_MEMBERSHIP_STATUS)) {
            $configs['membership_status'] = $membership_status;
        }

        if ($agile_membership_cid = $this->configuration->get(static::AGILE_MEMBERSHIP_CID)) {
            $configs['membership_category'] = $agile_membership_cid;
        }

        if ($membership_free_trial_id = $this->configuration->get(static::AGILE_MEMBERSHIP_FREE_TRIAL_ID)) {
            $configs['membership_free_trial_id'] = $membership_free_trial_id;
        }

        if ($membership_free_trial_state = $this->configuration->get(static::AGILE_MEMBERSHIP_FREE_TRIAL_STATE)) {
            $configs['membership_free_trial_state'] = $membership_free_trial_state;
        }
        if ($membership_reminder_days = $this->configuration->get(static::AGILE_MEMBERSHIP_REMINDER_DAYS)) {
            $configs['membership_reminder_days'] = $membership_reminder_days;
        }

        return $configs;
    }

    public function updateConfiguration(array $configuration): array
    {
        $this->configuration->set(static::AGILE_MEMBERSHIP_STATUS, $configuration['membership_status']);
        $this->configuration->set(static::AGILE_MEMBERSHIP_CID, $configuration['membership_category']);
        $this->configuration->set(static::AGILE_MEMBERSHIP_FREE_TRIAL_ID, $configuration['membership_free_trial_id']);
        $this->configuration->set(static::AGILE_MEMBERSHIP_FREE_TRIAL_STATE, $configuration['membership_free_trial_state']);
        $this->configuration->set(static::AGILE_MEMBERSHIP_REMINDER_DAYS, $configuration['membership_reminder_days']);

        return [];
    }

    public function validateConfiguration(array $configuration): bool
    {
        return true;
    }
}
