using MailSharp.MailClient.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace MailSharp.MailClient.Controllers.Api; // Translations must be available on the (logged-out) login page too, so this whole // controller stays anonymous-accessible even though most other API controllers now require login. [AllowAnonymous] [ApiController] [Route("api/language")] public class LanguageApiController(LocalizationService localizer) : ControllerBase { [HttpGet("state")] public IActionResult State() => Ok(BuildState(localizer.CurrentLanguage)); [HttpPost("set")] public IActionResult Set(SetLanguageRequest request) { if (!localizer.LanguageExists(request.Lang)) return BadRequest(); Response.Cookies.Append("lang", request.Lang, new CookieOptions { Expires = DateTimeOffset.UtcNow.AddYears(1), IsEssential = true, SameSite = SameSiteMode.Lax, HttpOnly = true }); return Ok(BuildState(request.Lang)); } private LanguageStateDto BuildState(string lang) => new() { Current = lang, Languages = [.. localizer.AvailableLanguages().Select(l => new LanguageOptionDto { Code = l.Code, Name = l.Name })], Strings = localizer.GetAllStrings(lang) }; }