using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

using OAuth2Study.Model.OAuth2;

namespace OAuth2Study.OAuthServer.Controllers
{
    [RoutePrefix("api/OAuth2")]
    public class OAuth2Controller : ApiController
    {
        [Route("GetAuthCode")]
        [HttpGet]
        public IHttpActionResult GetAuthCode([FromUri]RequestGrantInfo requestGrantInfo)
        {
            //1 检查输入

            //2 生成Code
            var code = GetCode();
            //3 返回
            var back_url = requestGrantInfo.redirect_uri + "?code=" + code + "&state=" + requestGrantInfo.state;

            return Redirect(back_url);
        }

        [Route("GetAccessToken")]
        public dynamic GetAccessToken(string grant_type, string code, string redirect_uri,string client_id)
        {
            //1 检查输入

            //2 生成AccessToken
            var accessToken = GetAccessToken();
            var refreshToken = GetAccessToken();

            //3 存储
            var reslut = new
            {
                access_token = GetAccessToken(),
                token_type = "mac",
                expires_in = 7200,
                refresh_token = GetAccessToken(),
                scope="publick",
            };

            //4 返回
            

            return reslut;
        }

        private string GetCode()
        {
            Random random = new Random(Guid.NewGuid().GetHashCode());

            return random.Next(100000, 999999).ToString();
        }

        private string GetAccessToken()
        {
            return Guid.NewGuid().ToString("N");
        }
    }
}