<?php

/*
 * This file is part of the FOSOAuthServerBundle package.
 *
 * (c) FriendsOfSymfony <http://friendsofsymfony.github.com/>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace OfficeBrain\Bundle\OauthBundle\Controller;

use OAuth2\OAuth2;
use OAuth2\OAuth2ServerException;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Nelmio\ApiDocBundle\Annotation\ApiDoc;


class TokenController extends Controller{

    /**
     * @var OAuth2
     */
    protected $server;
    protected $container;

    /**
     * @param OAuth2 $server
     */
    public function __construct(OAuth2 $server,$container) {
        $this->server = $server;
        $this->container = $container;
    }

    /**
     * @param Request $request
     * @ApiDoc(
     *      resource=true,
     *      section=" Authentication",
     *      description="To Get API/user Access Token",      
     *      statusCodes={
     *              1="Returned when success",
     *              403="Returned when the user is not authorized to see this link",
     *              0="Returned when form validation is failed",
     *      },
     *      requirements={
     *             {"name"="client_id", "dataType"="string", "required"=true, "description"="valid client_id"},
     *             {"name"="client_secret", "dataType"="string", "required"=true, "description"="valid client_secret"},
     *             {"name"="grant_type", "dataType"="string", "required"=true,  "description"="password|client_credentials"},
     *             {"name"="username", "dataType"="string",  "description"="valid username if grant_type is password"},
     *             {"name"="password", "dataType"="string",  "description"="valid user password if grant_type is password"}
     *      },  
     * )
     */
    public function tokenAction(Request $request) {
        try {
            $returnData = $this->server->grantAccessToken($request);
            $token = json_decode($returnData->getContent(), true);
            $data = ($this->server->verifyAccessToken($token));
            $user = $data->getUser();
			if($user){
	            $token['user']['email'] = $user->getEmail();
	            $token['user']['id'] = $user->getId();
	            $token['user']['firstName'] = $user->getFirstName();
	            $token['user']['lastName'] = $user->getLastName();
	            if ( ($photo = $user->getPhoto()) != '' && $photo != null){
	            	$baseUrl = $this->container->getParameter('base_url');
	            	$token['user']['photo_url'] = $baseUrl.'/images/uploads/user_photo/'.$photo;
	            }
			}

            return $returnData->setContent(json_encode($token));
        } catch (OAuth2ServerException $e) {
            return $e->getHttpResponse();
        }
    }

}
