using Microsoft.AspNetCore.Mvc;
using SchotzIadKmTracker.Api.Models.DTOs;
using SchotzIadKmTracker.Api.Services;
using SchotzIadKmTracker.Api.Services.Exceptions;
namespace SchotzIadKmTracker.Api.Controllers;
///
/// Endpoint de gestion de la configuration globale de l'application : lecture et modification
/// de la précision d'arrondi des distances (Precision_Distance, 0/1/2 décimales).
///
[ApiController]
[Route("api/parametres-application")]
public class ParametresApplicationController : ControllerBase
{
private readonly IPrecisionDistanceService _precisionDistanceService;
public ParametresApplicationController(IPrecisionDistanceService precisionDistanceService)
{
_precisionDistanceService = precisionDistanceService;
}
///
/// Retourne la configuration courante (crée la ligne singleton avec la valeur par défaut
/// (2) si elle est absente).
///
[HttpGet]
[ProducesResponseType(typeof(ParametresApplicationDto), StatusCodes.Status200OK)]
public async Task> Get(CancellationToken cancellationToken)
{
var precision = await _precisionDistanceService.ObtenirAsync(cancellationToken);
return Ok(new ParametresApplicationDto(precision));
}
///
/// Modifie la précision des distances. Rejette (400) si la valeur n'est pas 0, 1 ou 2.
///
[HttpPut]
[ProducesResponseType(typeof(ParametresApplicationDto), StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public async Task> Put(
[FromBody] SavePrecisionDistanceDto dto, CancellationToken cancellationToken)
{
try
{
var precision = await _precisionDistanceService.DefinirAsync(dto.PrecisionDistanceKm, cancellationToken);
return Ok(new ParametresApplicationDto(precision));
}
catch (PrecisionDistanceInvalideException ex)
{
return Problem(detail: ex.Message, statusCode: StatusCodes.Status400BadRequest);
}
}
}