<?php
namespace tests\codeception\api\_pages;

use yii\codeception\BasePage;

/**
 * @property \tests\codeception\api\FunctionalTester $actor
 */
class AuthenticationRoute extends BasePage {

    /**
     * @param string           $login
     * @param string           $password
     * @param string|bool|null $rememberMeOrToken
     * @param bool             $rememberMe
     */
    public function login($login = '', $password = '', $rememberMeOrToken = null, $rememberMe = false) {
        $this->route = ['authentication/login'];
        $params = [
            'login' => $login,
            'password' => $password,
        ];

        if ((is_bool($rememberMeOrToken) && $rememberMeOrToken) || $rememberMe) {
            $params['rememberMe'] = 1;
        } elseif ($rememberMeOrToken !== null) {
            $params['totp'] = $rememberMeOrToken;
        }

        $this->actor->sendPOST($this->getUrl(), $params);
    }

    public function logout() {
        $this->route = ['authentication/logout'];
        $this->actor->sendPOST($this->getUrl());
    }

    public function forgotPassword($login = null, $token = null) {
        $this->route = ['authentication/forgot-password'];
        $this->actor->sendPOST($this->getUrl(), [
            'login' => $login,
            'totp' => $token,
        ]);
    }

    public function recoverPassword($key = null, $newPassword = null, $newRePassword = null) {
        $this->route = ['authentication/recover-password'];
        $this->actor->sendPOST($this->getUrl(), [
            'key' => $key,
            'newPassword' => $newPassword,
            'newRePassword' => $newRePassword,
        ]);
    }

    public function refreshToken($refreshToken = null) {
        $this->route = ['authentication/refresh-token'];
        $this->actor->sendPOST($this->getUrl(), [
            'refresh_token' => $refreshToken,
        ]);
    }

}