using Microsoft.AspNetCore.Mvc;
using SVSim.Database.Repositories.Globals;
using SVSim.EmulatedEntrypoint.Models.Dtos.Requests.Arena;
using SVSim.EmulatedEntrypoint.Models.Dtos.Responses.Arena;
namespace SVSim.EmulatedEntrypoint.Controllers;
///
/// Generic /arena/* family — primarily challenge-history info read by the TK2 entry screen's
/// detail button. TODO: lifetime TK2 stats tracking; today we emit a stub.
///
[Route("arena")]
public class ArenaController : SVSimController
{
private readonly IGlobalsRepository _globalsRepository;
public ArenaController(IGlobalsRepository globalsRepository)
{
_globalsRepository = globalsRepository;
}
[HttpPost("get_challenge_info")]
public async Task GetChallengeInfo([FromBody] GetChallengeInfoRequest req)
{
if (!TryGetViewerId(out _)) return Unauthorized();
var season = await _globalsRepository.GetCurrentArenaSeason();
// Best-effort: pull begin/end_time + name from the season seed when present; otherwise
// emit deterministic stub values. All 6 ChallangeHistoryInfoTask.Parse fields must be
// present — the parser accesses them unconditionally.
var beginTime = "2026-05-01 02:00:00";
var endTime = "2026-06-01 01:59:59";
var name = "Take Two";
if (season is not null && !string.IsNullOrEmpty(season.FormatInfo) && season.FormatInfo != "{}")
{
try
{
using var doc = System.Text.Json.JsonDocument.Parse(season.FormatInfo);
if (doc.RootElement.TryGetProperty("start_time", out var st)) beginTime = st.GetString() ?? beginTime;
if (doc.RootElement.TryGetProperty("end_time", out var et)) endTime = et.GetString() ?? endTime;
if (doc.RootElement.TryGetProperty("card_pool_name", out var cp)) name = cp.GetString() ?? name;
}
catch { /* fall back to defaults */ }
}
// Default Challenge Master reward steps from prod capture: 3 milestones at 5/10/15 wins.
var rewardSteps = new Dictionary
{
["5"] = "5",
["10"] = "10",
["15"] = "15",
};
return Ok(new GetChallengeInfoResponseDto
{
ChallengeName = name,
BeginTime = beginTime,
EndTime = endTime,
TwoPickAllWinCount = 0,
RewardStepInfo = new RewardStepInfoDto
{
MaxRewardStep = 15,
RewardStepList = rewardSteps,
},
});
}
[HttpPost("get_challenge_ranking_history")]
public IActionResult GetChallengeRankingHistory([FromBody] GetChallengeInfoRequest req)
{
if (!TryGetViewerId(out _)) return Unauthorized();
// Prod returns {two_pick: [], sealed: []}. Stub matches.
return Ok(new GetChallengeRankingHistoryResponseDto());
}
}