<?php
namespace App\Controller;
use App\Entity\Challenge;
use App\Repository\ChallengeRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Symfony\Component\HttpFoundation\JsonResponse;
use App\Service\PlayerService;
use App\Service\ChallengeService;
/**
* @Route("/api")
*/
class ApiController extends AbstractController
{
const RESPONSE_TYPE_NEXT = 'next';
const RESPONSE_TYPE_NON_PREMIUM = 'nonpremium';
const RESPONSE_TYPE_NO_MORE = 'unavailable';
/**
* @Route("/", name="api_index", methods={"GET"})
*/
public function index()
{
return new JsonResponse(['status' => 'alive'], 200);
}
/**
* @Route("/make-premium", name="make_premium", methods={"POST"})
*/
public function makePremium(Request $request, PlayerService $player_service)
{
$parameters = json_decode($request->getContent(), true);
$identificator = $parameters['identificator'];
/* Get Current Player */
$player = $player_service->getPlayer($identificator, true);
return new JsonResponse('OK', 200);
}
/**
* @Route("/check-premium", name="check_premium", methods={"POST"})
*/
public function checkPremium(Request $request, PlayerService $player_service)
{
$parameters = json_decode($request->getContent(), true);
$identificator = $parameters['identificator'];
/* Get Current Player */
$premium = $player_service->checkPlayer($identificator, true);
return new JsonResponse($premium, 200);
}
/**
* @Route("/set-language", name="set_language", methods={"POST"})
*/
public function setLanguage(Request $request, PlayerService $player_service)
{
$parameters = json_decode($request->getContent(), true);
$identificator = $parameters['identificator'];
$language = $parameters['language'];
/* Get Current Player */
$player = $player_service->setLanguage($identificator, $language);
return new JsonResponse('OK', 200);
}
/**
* @Route("/get-language", name="get_language", methods={"POST"})
*/
public function getLanguage(Request $request, PlayerService $player_service)
{
$parameters = json_decode($request->getContent(), true);
$identificator = $parameters['identificator'];
/* Get Current Player */
$player = $player_service->getPlayer($identificator);
$language = $player->getLanguage();
if(!$language){
$language = 'en';
}
$result = [
'language' => $language,
];
return new JsonResponse($result, 200);
}
/**
* @Route("/next", name="api_next_challenge", methods={"POST"})
*/
public function next(Request $request, PlayerService $player_service, ChallengeService $challenge_service)
{
/*
{
"identificator": "v1a6dfv41a681ae",
"type": "random"
}
*/
$parameters = json_decode($request->getContent(), true);
$identificator = $parameters['identificator'];
$required_type = $parameters['type'];
/* Get Current Player */
$player = $player_service->getPlayer($identificator);
/* Get Unseen Challenge */
$challenge = $challenge_service->getUnseenChallenge($player, $required_type);
if($challenge == 'nonpremium'){
$result = [
'reponse_type' => self::RESPONSE_TYPE_NON_PREMIUM,
];
}
elseif($challenge){
/* Log Action For Player */
$player_service->createLog($player, $challenge, 'seen');
if($player->getLanguage() == 'es'){
$challenge_result = $challenge->getChallengeEsp();
}
elseif($player->getLanguage() == 'fr'){
$challenge_result = $challenge->getChallengeFr();
}
else{
$challenge_result = $challenge->getChallengeEn();
}
$result = [
'challenge' => $challenge_result,
'reponse_type' => self::RESPONSE_TYPE_NEXT,
];
}
else{
$result = [
'reponse_type' => self::RESPONSE_TYPE_NO_MORE,
];
}
return new JsonResponse($result, 200);
}
}