using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
using JtkMainServer.Managers;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace JtkMainServer.Pages.MyPage.ChangePassword {
    public class IndexModel : PageModel {
        public string Message { get; set; }
        public string ErrorMessage { get; set; }

        [BindProperty]
        public Models.ChangePassword ChangePassword { get; set; }

        public IActionResult OnGet() {
            if (string.IsNullOrWhiteSpace(HttpContext.Session.GetString("LoggedInUserId"))) {
                // 로그인 안 했을 시, 로그인 페이지로
                HttpContext.Session.SetString("RequestedPage", "MyPage/ChangePassword/Index");
                return RedirectToPage("/Login");
            }
            return Page();
        }

        public IActionResult OnPost() {
            var loginUserId = HttpContext.Session.GetString("LoggedInUserId");
            if (string.IsNullOrWhiteSpace(loginUserId)) {
                // 로그인 안 했을 시, 로그인 페이지로
                HttpContext.Session.SetString("RequestedPage", "MyPage/ChangePassword/Index");
                return RedirectToPage("/Login");
            }

            if (ModelState.IsValid == false) {
                // 유효성 검사 불통과 시
                return Page();
            }
            
            var user = DbManager.GetUser(loginUserId);
            if (user == null || DbManager.ComparePasswords(ChangePassword.PreviousPassword, user.Password) == false) {
                // 회원이 존재하지 않거나 또는 기존 비밀번호 틀렸을 시
                ErrorMessage = "기존 비밀번호를 잘못 입력하셨습니다.";
                return Page();
            }
            
            // 기존 비밀번호 맞았을 시
            DbManager.ChangePassword(loginUserId, ChangePassword.NewPassword);
            Message = "비밀번호가 변경되었습니다.";
            return Page();
            
        }
    }
}