<?php
class Auth
{
	public static function loginByUsuario(AcceptanceTester $I, $usuario){
		$I->amOnPage(Url::create('site/login'));
		$I->fillField('LoginForm[username]', $usuario);
		$I->fillField('LoginForm[password]','aaaaa');
		$I->click('button');

		$I->amOnPage(Url::create("site/topo"));
		$id = $I->grabValueFrom('#idusuario');
		return Funcionarios::model()->findByPk($id);
	}

	public static function loginByFuncionario(AcceptanceTester $I, Funcionarios $funcionario){
		$I->amOnPage(Url::create('site/login'));
		$I->fillField('LoginForm[username]', $funcionario->FUN_USUARIO);
		$I->fillField('LoginForm[password]', $funcionario->FUN_SENHA);
		$I->click('button');
		$I->am("{$funcionario->getPrivilegio()}: {$funcionario->FUN_NOME} - {$funcionario->FUN_USUARIO}");
		return $funcionario;
	}

	public static function loginByPrivilegio(AcceptanceTester $I, int $privilegio, $extraCondition = false) {
		$condition = "FUN_PRM_PRIVILEGIO = {$privilegio} and FUN_SITUACAO = 'A'";
		if($extraCondition) {
			$condition .= " and $extraCondition";
		}
		$funcionario = ModelFind::getRand('Funcionarios', $condition);
		if(!$funcionario)
			throw new Exception("Busca de funcionário pelo privilégio {$privilegio} não retornou nenhum registro, SQL: {$condition}", 1);
			
		return self::loginByFuncionario($I, $funcionario);
	}

	public static function loginById(AcceptanceTester $I, int $id){
		$condition = "FUN_IDFUNCIONARIO = {$id}";

		$funcionario = ModelFind::get('Funcionarios', $condition);
		if(!$funcionario)
			throw new Exception("Busca de funcionário pelo código {$id} não retornou nenhum registro, SQL: {$condition}", 1);
		return self::loginByFuncionario($I, $funcionario);
	}

	public static function logout(AcceptanceTester $I) {
		$I->amOnPage(Url::create('site/logout'));
	}
}