// EN: Handler for UpdateCategoryCommand.
// VI: Handler cho UpdateCategoryCommand.

using MediatR;
using Microsoft.EntityFrameworkCore;
using CatalogService.Infrastructure;

namespace CatalogService.API.Application.Commands;

/// <summary>
/// EN: Handler for updating a category.
/// VI: Handler cập nhật danh mục.
/// </summary>
public class UpdateCategoryCommandHandler : IRequestHandler<UpdateCategoryCommand, bool>
{
    private readonly CatalogContext _context;

    public UpdateCategoryCommandHandler(CatalogContext context)
    {
        _context = context ?? throw new ArgumentNullException(nameof(context));
    }

    public async Task<bool> Handle(UpdateCategoryCommand request, CancellationToken cancellationToken)
    {
        // EN: Retrieve category
        // VI: Lấy danh mục
        var category = await _context.Categories
            .FirstOrDefaultAsync(c => c.Id == request.CategoryId, cancellationToken);

        if (category == null)
        {
            return false;
        }

        // EN: Update basic information
        // VI: Cập nhật thông tin cơ bản
        category.UpdateInfo(request.Name, request.Description, request.DisplayOrder);

        // EN: Update image if provided
        // VI: Cập nhật hình ảnh nếu được cung cấp
        if (request.ImageUrl != null)
        {
            category.UpdateImage(request.ImageUrl);
        }

        // EN: Save changes
        // VI: Lưu thay đổi
        await _context.SaveChangesAsync(cancellationToken);

        return true;
    }
}
