<?php
/**********************************************************************
 * ProxmoxVPS developed. (26.03.19)
 * *
 *
 *  CREATED BY MODULESGARDEN       ->       http://modulesgarden.com
 *  CONTACT                        ->       contact@modulesgarden.com
 *
 *
 * This software is furnished under a license and may be used and copied
 * only  in  accordance  with  the  terms  of such  license and with the
 * inclusion of the above copyright notice.  This software  or any other
 * copies thereof may not be provided or otherwise made available to any
 * other person.  No title to and  ownership of the  software is  hereby
 * transferred.
 *
 *
 **********************************************************************/

namespace ModulesGarden\Servers\ProxmoxCloudVps\App\Http\Actions;

use ModulesGarden\ProxmoxAddon\App\Configuration\Addon\Update\AddonUpgradeService;
use ModulesGarden\ProxmoxAddon\App\Models\ModuleSettings;
use ModulesGarden\ProxmoxAddon\App\Services\ApiService;
use ModulesGarden\ProxmoxAddon\App\Services\Cloud\NetworkService;
use ModulesGarden\ProxmoxAddon\App\Services\Cloud\ProductService;
use ModulesGarden\ProxmoxAddon\App\Services\Cloud\UserService;
use ModulesGarden\ProxmoxAddon\App\Services\Cloud\HostingService;
use ModulesGarden\ProxmoxAddon\App\Enum\Cloud\CustomField;
use ModulesGarden\ProxmoxAddon\App\Services\Utility;
use ModulesGarden\Servers\ProxmoxCloudVps\App\Helpers\AppParams;
use ModulesGarden\Servers\ProxmoxCloudVps\App\Helpers\ProxmoxAddonValidator;
use ModulesGarden\Servers\ProxmoxCloudVps\Core\App\Controllers\Instances\AddonController;
use ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Traits\WhmcsParams;

class CreateAccount extends AddonController
{
    use WhmcsParams;
    use ProductService;
    use ApiService;
    use UserService;
    use HostingService;

    /**
     * @var AddonUpgradeService
     */
    private $addonUpgradeService;

    public function execute($params = null)
    {
        if(!ProxmoxAddonValidator::isInstalled()){
            return ProxmoxAddonValidator::failAsString();
        }
        try
        {
            (new AppParams())->initFromWhmcsParams();
            $this->addonUpgradeService = new AddonUpgradeService();
            $this->networkService = new NetworkService();
            $this->addonUpgradeService->run();
            if(!$this->configuration()->getTagFrom() || !$this->configuration()->getTagTo() && $this->configuration()->isPermissionVirtualNetwork()){
                throw new \Exception("Product configuration validator error: VLAN TAG Range Number is empty.");
            }
            //Bandwith limit
            $this->saveUsageLimit();
            //Assing ip
            if (!Utility::isIpManagerProxmoxCloudIntegration())
            {
                list($ip4, $ip6) = $this->networkService->getIpAddressesRequest();

                $this->networkService->addIp($ip4, $ip6, $this->getDefaultNodeIfSet());
            }
            if( $this->isUser()){
                return "success";
            }
            $this->userCreate();
            $this->customFieldUpdate(CustomField::AUTHENTICATION, $this->configuration()->getRealm());
            return "success";
        }
        catch (\Exception $ex)
        {
            if (ModuleSettings::isDebug())
            {
                logModuleCall(
                    'ProxmoxCloudVps',
                    __CLASS__,
                    [],
                    null,
                    $ex->getMessage() . " " . $ex->getTraceAsString()
                );
            }
            return $ex->getMessage();
        }
    }







}