using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using TaxBaik.Application.Services;

namespace TaxBaik.Web.Pages;

public class ContactModel : PageModel
{
    private readonly InquiryService _inquiryService;
    private readonly ILogger<ContactModel> _logger;

    [BindProperty]
    public string Name { get; set; } = "";

    [BindProperty]
    public string Phone { get; set; } = "";

    [BindProperty]
    public string? Email { get; set; }

    [BindProperty]
    public string ServiceType { get; set; } = "기타";

    [BindProperty]
    public string Message { get; set; } = "";

    [BindProperty]
    public bool Agree { get; set; }

    public ContactModel(InquiryService inquiryService, ILogger<ContactModel> logger)
    {
        _inquiryService = inquiryService;
        _logger = logger;
    }

    public async Task<IActionResult> OnPostAsync()
    {
        _logger.LogInformation("[Contact] POST 요청 시작: Name={Name}, Phone={Phone}, Service={Service}", Name, Phone, ServiceType);

        if (!ModelState.IsValid || !Agree)
        {
            _logger.LogWarning("[Contact] 유효성 검사 실패 또는 동의 미체크");
            return Page();
        }

        try
        {
            _logger.LogInformation("[Contact] SubmitAsync 호출 전");
            var inquiryId = await _inquiryService.SubmitAsync(
                Name,
                Phone,
                ServiceType,
                Message,
                Email,
                HttpContext.Connection.RemoteIpAddress?.ToString());
            _logger.LogInformation("[Contact] SubmitAsync 완료: InquiryId={Id}", inquiryId);
            TempData["Success"] = "상담 신청이 접수되었습니다. 빠른 시간 내에 연락드리겠습니다.";
            return RedirectToPage();
        }
        catch (ValidationException ex)
        {
            _logger.LogWarning(ex, "[Contact] 유효성 검사 오류: {Message}", ex.Message);
            ModelState.AddModelError("", ex.Message);
            return Page();
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "[Contact] 예외 발생");
            ModelState.AddModelError("", "시스템 오류가 발생했습니다. 잠시 후 다시 시도해주세요.");
            return Page();
        }
    }
}
