/home/ivoiecob/email.hirewise-va.com/modules/OAuthIntegratorWebclient/Manager.php
<?php
/**
 * This code is licensed under AGPLv3 license or Afterlogic Software License
 * if commercial version of the product was purchased.
 * For full statements of the licenses see LICENSE-AFTERLOGIC and LICENSE-AGPL3 files.
 */

namespace Aurora\Modules\OAuthIntegratorWebclient;

use Aurora\Modules\OAuthIntegratorWebclient\Models\OauthAccount;

/**
 * @license https://www.gnu.org/licenses/agpl-3.0.html AGPL-3.0
 * @license https://afterlogic.com/products/common-licensing Afterlogic Software License
 * @copyright Copyright (c) 2023, Afterlogic Corp.
 *
 * @property Module $oModule
 */
class Manager extends \Aurora\System\Managers\AbstractManager
{
    public function __construct(?\Aurora\System\Module\AbstractModule $oModule = null)
    {
        parent::__construct($oModule);
    }

    /**
     * @param int $iUserId
     * @param string $sType
     *
     * @return \Aurora\Modules\OAuthIntegratorWebclient\Models\OauthAccount
     */
    public function getAccount($iUserId, $sType, $sEmail = '')
    {
        $mResult = false;

        $oQuery = OauthAccount::where('IdUser', $iUserId)->where('Type', $sType);
        if (!empty($sEmail)) {
            $oQuery = $oQuery->where('Email', $sEmail);
        }
        try {
            $mResult = $oQuery->first();
        } catch (\Aurora\System\Exceptions\BaseException $oException) {
            $mResult = false;
            $this->setLastException($oException);
        }
        return $mResult;
    }

    /**
     * @param string $sIdSocial
     * @param string $sType
     *
     * @return OauthAccount|bool
     */
    public function getAccountById($sIdSocial, $sType)
    {
        $mResult = false;
        try {
            $mResult = OauthAccount::where('IdSocial', $sIdSocial)->where('Type', $sType)->first();
        } catch (\Aurora\System\Exceptions\BaseException $oException) {
            $mResult = false;
            $this->setLastException($oException);
        }
        return $mResult;
    }

    /**
     * @param int $iIdUser
     *
     * @return array
     */
    public function getAccounts($iIdUser)
    {
        $aResult = false;
        try {
            $aResult = OauthAccount::where('IdUser', $iIdUser)->get();
        } catch (\Aurora\System\Exceptions\BaseException $oException) {
            $aResult = false;
            $this->setLastException($oException);
        }
        return $aResult;
    }

    /**
     * @param \Aurora\Modules\OAuthIntegratorWebclient\Models\OauthAccount &$oAccount
     *
     * @return bool
     */
    public function createAccount(OauthAccount &$oAccount)
    {
        $bResult = false;
        try {
            if ($oAccount->validate()) {
                if (!$this->isExists($oAccount)) {
                    if (!$oAccount->save()) {
                        throw new \Aurora\System\Exceptions\ManagerException(0);
                    }
                } else {
                    throw new \Aurora\System\Exceptions\ManagerException(0);
                }
            }

            $bResult = true;
        } catch (\Aurora\System\Exceptions\BaseException $oException) {
            $bResult = false;
            $this->setLastException($oException);
        }

        return $bResult;
    }

    /**
     * @param \Aurora\Modules\OAuthIntegratorWebclient\Models\OauthAccount &$oAccount
     *
     * @return bool
     */
    public function updateAccount(OauthAccount &$oAccount)
    {
        $bResult = false;
        try {
            if ($oAccount->validate()) {
                if (!$oAccount->save()) {
                    throw new \Aurora\System\Exceptions\ManagerException(0);
                }
            }

            $bResult = true;
        } catch (\Aurora\System\Exceptions\BaseException $oException) {
            $bResult = false;
            $this->setLastException($oException);
        }

        return $bResult;
    }

    /**
     * @param int $iIdUser
     * @param string $sType
     *
     * @return bool
     */
    public function deleteAccount($iIdUser, $sType, $sEmail)
    {
        $bResult = false;
        try {
            $oSocial = $this->getAccount($iIdUser, $sType, $sEmail);
            if ($oSocial) {
                if (!$oSocial->delete()) {
                    throw new \Aurora\System\Exceptions\ManagerException(0);
                }
                $bResult = true;
            }
        } catch (\Aurora\System\Exceptions\BaseException $oException) {
            $bResult = false;
            $this->setLastException($oException);
        }

        return $bResult;
    }

    /**
     * @param int $iIdUser
     *
     * @return bool
     */
    public function deleteAccountByUserId($iIdUser)
    {
        return !!OauthAccount::where('IdUser', $iIdUser)->delete();
    }

    /**
     * @param \Aurora\Modules\OAuthIntegratorWebclient\Models\OauthAccount &$oAccount
     *
     * @return bool
     */
    public function isExists(OauthAccount $oAccount)
    {
        return (OauthAccount::find($oAccount->Id) instanceof OauthAccount);
    }
}