using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;

/// <summary>
/// Glasgow Coma Scale (GCS) scoring: latest computed score per encounter.
/// </summary>
[ApiController]
[Route("api/v1/encounters/{encounterId:guid}/gcs")]
[Produces("application/json")]
[AuthorizePermission(ClinicalPermissions.EncountersRead)]
public class GcsController : ControllerBase
{
    private readonly IGcsService _gcs;

    public GcsController(IGcsService gcs) => _gcs = gcs;

    /// <summary>
    /// Returns the latest GCS score for an encounter, or null data when no score has been computed.
    /// </summary>
    /// <param name="encounterId">Encounter id.</param>
    /// <returns>The GCS component scores and total, or null.</returns>
    [HttpGet]
    [ProducesResponseType(typeof(ApiResponse<GcsScoreResponse>), StatusCodes.Status200OK)]
    public async Task<IActionResult> Current(Guid encounterId)
    {
        var score = await _gcs.GetCurrentAsync(encounterId);
        if (score is null)
            return Ok(ApiResponse<GcsScoreResponse?>.Ok(null));

        return Ok(ApiResponse<GcsScoreResponse>.Ok(new GcsScoreResponse(
            score.EyeScore, score.VerbalScore, score.MotorScore,
            score.TotalScore, score.Classification, score.CalculatedAt)));
    }
}