using Microsoft.AspNetCore.Mvc;
using SiteManagementSystem_SoftwareEngineering_.Entity;
using SiteManagementSystem_SoftwareEngineering_.Extension;
using SiteManagementSystem_SoftwareEngineering_.Factory;
using SiteManagementSystem_SoftwareEngineering_.Interface;
using SiteManagementSystem_SoftwareEngineering_.Model;

namespace SiteManagementSystem_SoftwareEngineering_.Controllers
{
    public class UserController : ControllerBase
    {
        private readonly IUserManageService _userManageService;
        private readonly ITokenFactory _tokenFactory;
        public UserController(IUserManageService userManageService,ITokenFactory tokenFactory)
        {
            _userManageService = userManageService;
            _tokenFactory = tokenFactory;
        }

        [HttpGet("AddInitAdministratorUser")]
        public IActionResult AddInitAdministratorUser()
        {
            _userManageService.AddUser(
                new User
                {
                    Name = "admin",
                    RoleName = "Administrator",
                    Secret = "admin"
                }
            );
            return this.Success();
        }

        [HttpPost("AddUser")]
        public IActionResult AddUser(UserModel user)
        {
            _userManageService.AddUser(new User(user));
            return this.Success();
        }

        [HttpPost("Login")]
        public IActionResult Login(UserModel model)
        {
            var user = new User(model);
            var (result, info) = _userManageService.IsUserExist(ref user);
            if (!result)
                return this.Forbidden(info);

            return this.Success("", new
            {
                AccessToken = _tokenFactory.CreateAccessToken(user),
                RefreshToken = _tokenFactory.CreateRefreshToken(user)
            });
        }
    }
}