using Microsoft.AspNetCore.Mvc; using LittleShop.Services; using LittleShop.Enums; namespace LittleShop.Controllers; [ApiController] [Route("api/[controller]")] public class CurrencyController : ControllerBase { private readonly ISilverPayService _silverPayService; private readonly ISystemSettingsService _systemSettingsService; private readonly ILogger _logger; public CurrencyController( ISilverPayService silverPayService, ISystemSettingsService systemSettingsService, ILogger logger) { _silverPayService = silverPayService; _systemSettingsService = systemSettingsService; _logger = logger; } [HttpGet("available")] public async Task>> GetAvailableCurrencies() { try { var availableCurrencies = new List(); // Get SilverPay supported currencies var silverPayCurrencies = await _silverPayService.GetSupportedCurrenciesAsync(); // Production currencies (always enabled if supported by SilverPay) var productionCurrencies = new[] { "BTC", "ETH" }; foreach (var currency in productionCurrencies) { if (silverPayCurrencies.Contains(currency)) { availableCurrencies.Add(currency); } } // Test currencies (enabled via admin settings) var testCurrencies = new[] { "TBTC", "TLTC" }; foreach (var currency in testCurrencies) { if (silverPayCurrencies.Contains(currency) && await _systemSettingsService.IsTestCurrencyEnabledAsync(currency)) { availableCurrencies.Add(currency); } } _logger.LogInformation("Available currencies: {Currencies}", string.Join(", ", availableCurrencies)); return Ok(availableCurrencies); } catch (Exception ex) { _logger.LogError(ex, "Error getting available currencies"); // Return safe fallback currencies return Ok(new[] { "BTC", "ETH" }); } } [HttpGet("silverpay/supported")] public async Task>> GetSilverPaySupportedCurrencies() { try { var currencies = await _silverPayService.GetSupportedCurrenciesAsync(); return Ok(currencies); } catch (Exception ex) { _logger.LogError(ex, "Error getting SilverPay supported currencies"); return StatusCode(500, "Failed to get supported currencies"); } } }