using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using TaxBaik.Application.Services; using TaxBaik.Domain.Interfaces; namespace TaxBaik.Web.Controllers; [ApiController] [Route("api/[controller]")] public class InquiryController : ControllerBase { private readonly InquiryService _inquiryService; private readonly IInquiryRepository _inquiryRepository; public InquiryController(InquiryService inquiryService, IInquiryRepository inquiryRepository) { _inquiryService = inquiryService; _inquiryRepository = inquiryRepository; } [HttpPost] public async Task Submit([FromBody] SubmitInquiryRequest request) { if (string.IsNullOrWhiteSpace(request.Name) || string.IsNullOrWhiteSpace(request.Phone)) return BadRequest(new { message = "Name and phone are required" }); await _inquiryService.SubmitAsync(request.Name, request.Phone, request.ServiceType, request.Message); return Ok(new { message = "Inquiry submitted successfully" }); } [HttpGet] [Authorize] public async Task GetPaged([FromQuery] int page = 1, [FromQuery] int pageSize = 20) { var (inquiries, total) = await _inquiryRepository.GetPagedAsync(page, pageSize); return Ok(new { data = inquiries, total, page, pageSize }); } [HttpGet("{id}")] [Authorize] public async Task GetById(int id) { var inquiry = await _inquiryRepository.GetByIdAsync(id); if (inquiry == null) return NotFound(new { message = "Inquiry not found" }); return Ok(inquiry); } [HttpPut("{id}/status")] [Authorize] public async Task UpdateStatus(int id, [FromBody] UpdateStatusRequest request) { var inquiry = await _inquiryRepository.GetByIdAsync(id); if (inquiry == null) return NotFound(new { message = "Inquiry not found" }); await _inquiryRepository.UpdateStatusAsync(id, request.Status); return Ok(new { message = "Status updated" }); } } public class SubmitInquiryRequest { public string Name { get; set; } = string.Empty; public string Phone { get; set; } = string.Empty; public string? Email { get; set; } public string ServiceType { get; set; } = string.Empty; public string Message { get; set; } = string.Empty; } public class UpdateStatusRequest { public string Status { get; set; } = string.Empty; }