using System.Text.Json;
using System.Text.RegularExpressions;

namespace SilverLabs.Website.Services;

public class DeveloperTicketParsingService
{
    private readonly HttpClient _httpClient;
    private readonly ILogger<DeveloperTicketParsingService> _logger;

    public DeveloperTicketParsingService(HttpClient httpClient, ILogger<DeveloperTicketParsingService> logger)
    {
        _httpClient = httpClient;
        _logger = logger;
    }

    public async Task<JsonElement?> FetchTicketAsync(string ticketId)
    {
        try
        {
            var response = await _httpClient.GetAsync($"/api/tickets/{ticketId}");
            if (!response.IsSuccessStatusCode)
            {
                _logger.LogError("Failed to fetch ticket {TicketId}: {Status}", ticketId, response.StatusCode);
                return null;
            }

            var json = await response.Content.ReadAsStringAsync();
            return JsonSerializer.Deserialize<JsonElement>(json);
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "Error fetching ticket {TicketId}", ticketId);
            return null;
        }
    }

    public (string? FullName, string? Email, string? DesiredUsername) ParseApplicationFromDescription(string description)
    {
        var fullName = ExtractField(description, @"\*\*Full Name:\*\*\s*(.+)");
        var email = ExtractField(description, @"\*\*Email:\*\*\s*(.+)");
        var desiredUsername = ExtractField(description, @"\*\*Desired Username:\*\*\s*(.+)");

        return (fullName, email, desiredUsername);
    }

    private static string? ExtractField(string text, string pattern)
    {
        var match = Regex.Match(text, pattern);
        return match.Success ? match.Groups[1].Value.Trim() : null;
    }
}
