using CoviDok.Api;
using CoviDok.Api.Request;
using CoviDok.Api.Response;
using CoviDok.BLL;
using CoviDok.BLL.Sessions;
using CoviDok.BLL.User;
using CoviDok.Data.SessionProviders;
using Microsoft.AspNetCore.Mvc;
using System.Text.RegularExpressions;
using System.Threading.Tasks;


namespace CoviDok.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class AuthController : ControllerBase
    {
        SessionHandler Handler = new SessionHandler(new RedisProvider("redis"));

        

        // POST: /api/Auth/login
        [HttpPost("login")]
        public async Task<ActionResult<AuthIdentity>> PostLogin(AuthLogin authLogin)
        {
            AuthIdentity authIdentity = await Auth.AuthenticateUser(authLogin.Email, authLogin.Password);
            if (authIdentity == null) return Unauthorized();
            authIdentity.SessionID = await Handler.CreateSession(authIdentity.Role, authIdentity.UserId);
            return authIdentity;
        }

        // POST: /api/Auth/register
        [HttpPost("register")]
        public async Task<ActionResult<GenericResponse>> PostRegister(AuthRegistration authRegistration)
        {
            // System.Diagnostics.Debug.WriteLine(authRegistration.ToString());
            // Validate Email
            GenericResponse genericResponse = Auth.ValidateRegistration(authRegistration.Email, authRegistration.Password);
            if (genericResponse.Status == Status.Error) return genericResponse;

            return await Auth.CreateUser(authRegistration);
        }
    }
}