using Lada.Framework.DTO.SmartTable;
using Ladaer.BackEnd.Infrastructures.Services.Finances;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Lada.Framework.Infrastructures.Helpers;
using Ladaer.BackEnd.Infrastructures.DTO.Models.Categories;
using Ladaer.BackEnd.Infrastructures.DTO.Models.Finances;

namespace Ladaer.BackEnd.Controllers.Finance
{
    [Route("api/[controller]")]
    [ApiController]
    [Authorize]
    public class CashierController : ControllerBase
    {
        private readonly ICashierService _cashierService;

        public CashierController(ICashierService cashierService)
        {
            _cashierService = cashierService;
        }

        [HttpPost("Search")]
        [Authorize(Roles = "Cashier.Search")]
        public async Task<IActionResult> Search(SmartTableParam param)
        {
            var currentUser = User.GetCurrentUser();
            if (currentUser == null)
            {
                return BadRequest("Không có người dùng");
            }
            if (currentUser.UserId <= 0 || string.IsNullOrEmpty(currentUser.UserName))
            {
                return BadRequest("Không xác định được người dùng");
            }

            var result = await _cashierService.Search(param, currentUser.UserId);
            return Ok(result);
        }


        [HttpPost("Collect")]
        [Authorize(Roles = "Cashier.CollectCashier")]
        public async Task<IActionResult> CollectCashier([FromBody] CollectCashierModel model)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }


            var currentUser = User.GetCurrentUser();
            if (currentUser == null)
            {
                return BadRequest("Không có người dùng");
            }
            if (currentUser.UserId <= 0 || string.IsNullOrEmpty(currentUser.UserName))
            {
                return BadRequest("Không xác định được người dùng");
            }

            model.UpdatedBy = currentUser.UserId;
            model.UpdatedByUserName = currentUser.UserName;

            var result = await _cashierService.CollectCashier(model);
            return Ok(result);
        }
    }
}
