<?php
defined('PHPFOX') or exit('NO DICE!');
define('PHPFOX_APP_INSTALLING', true);
/**
 * Class Admincp_Component_Controller_Store_Ftp
 */
class Admincp_Component_Controller_Store_Ftp extends Phpfox_Component
{
    public function process()
    {
        $listMethod = [
            "sftp_ssh" => _p('sftp_ssh'),
            "ftp" => _p('ftp'),
            "file_system" => _p('file_system')
        ];

        $currentUploadMethod = Phpfox::getParam('core.upload_method');
        $currentHostName = Phpfox::getParam('core.ftp_host_name');
        $currentPort = Phpfox::getParam('core.ftp_port');
        $currentUsername = Phpfox::getParam('core.ftp_user_name');
        $currentPassword = Phpfox::getParam('core.ftp_password');
        $type = $this->request()->get('type');
        $productName = $this->request()->get('productName');
        $productId = $this->request()->get('productId');
        $appDir = $this->request()->get('apps_dir');
        $extraBase64 = $this->request()->get('extraBase64');
        $extra = json_decode(base64_decode($extraBase64), true);

	    $this->template()->setSectionTitle('<a href="' . $this->url()->current() . '">' . _p('Install Method') . '</a>');

        $this->template()->assign([
            'productId' => $productId,
            'listMethod' => $listMethod,
            'currentUploadMethod' => $currentUploadMethod,
            'currentHostName' => $currentHostName,
            'currentPort' => $currentPort,
            'currentUsername' => $currentUsername,
            'currentPassword' => $currentPassword,
            'type' => $type,
            'productName' => $productName,
            'apps_dir' => $appDir,
            'extraBase64' => $extraBase64,
            'targetDirectory' => $this->request()->get('targetDirectory')
        ]);

        //get account info
        if ($aVals = $this->request()->getArray('val')) {
            //update setting value
            Admincp_Service_Store_Verify::instance()->updateSetting($aVals);

            $aVals['extra'] = json_decode(base64_decode($aVals['extraBase64']), true);
            $manager = new \Core\Installation\Manager($aVals);
            if ($manager->verifyFtpAccount()) {
                try {

	                if (is_numeric($aVals['productName'])) {
		                if (is_numeric($productName)) {
			                foreach ((new \Core\App())->all() as $app) {
				                if (isset($app->store_id) && $app->store_id == $aVals['productName']) {
					                $aVals['productName'] = $app->id;
					                break;
				                }
			                }
		                }
	                }
                    $url = $manager->install($aVals);
                    echo '<script>window.top.location.href = \'' . $url . '\';</script>';
                    exit;
                } catch (\Exception $ex) {
	                if (PHPFOX_DEBUG) {
		                throw new \Exception($ex->getMessage(), $ex->getCode(), $ex);
	                }
                    return \Phpfox_Error::set($ex->getMessage());
                }

            } else {
                return Phpfox_Error::set(_p('Your ftp account don\'t work'));
            }
        }
        return null;
    }
}