// EN: Base controller providing shared helpers for merchant controllers.
// VI: Controller cơ sở cung cấp helpers dùng chung cho merchant controllers.

using Microsoft.AspNetCore.Mvc;
using MerchantService.Domain.Exceptions;

namespace MerchantService.API.Controllers;

/// <summary>
/// EN: Base controller with authentication helpers.
/// VI: Controller cơ sở với helpers xác thực.
/// </summary>
public abstract class MerchantBaseController : ControllerBase
{
    /// <summary>
    /// EN: Extract current user ID from JWT claims (sub or nameidentifier).
    ///     Throws DomainException if not authenticated.
    /// VI: Lấy user ID hiện tại từ JWT claims (sub hoặc nameidentifier).
    ///     Ném DomainException nếu chưa xác thực.
    /// </summary>
    protected Guid GetCurrentUserId()
    {
        var userIdClaim = User.FindFirst("sub")?.Value
            ?? User.FindFirst("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier")?.Value;

        if (string.IsNullOrEmpty(userIdClaim) || !Guid.TryParse(userIdClaim, out var userId))
            throw new DomainException("User not authenticated / Người dùng chưa xác thực");

        return userId;
    }
}
