using Microsoft.Extensions.Configuration;
using Groq.Services;

var config = new ConfigurationBuilder()
    .AddJsonFile("appsettings.json")
    .AddUserSecrets<Program>()
    .Build();

var apiKey = config["Groq:ApiKey"] ?? throw new Exception("Brak klucza API!");
var apiUrl = config["Groq:ApiUrl"]!;
var model = config["Groq:Model"]!;

var service = new GroqService(apiKey, apiUrl, model);

Console.WriteLine("╔═══════════════════════════════════════╗");
Console.WriteLine("║   🤖 Groq API Demo                    ║");
Console.WriteLine("╚═══════════════════════════════════════╝\n");

while (true)
{
    Console.WriteLine("\nWybierz demo:");
    Console.WriteLine("1. Podstawowe wywołanie");
    Console.WriteLine("2. Streaming");
    Console.WriteLine("2. System prompt");
    Console.WriteLine("0. Wyjście");
    Console.Write("\nTwój wybór: ");

    var choice = Console.ReadLine();

    switch (choice)
    {
        case "1":
            await DemoBasic();
            break;
        case "2":
            await DemoStreaming();
            break;
        case "3":
            await DemoSystemPrompts();
            break;
        case "0":
            return;
    }
}

async Task DemoBasic()
{
    Console.WriteLine("\n=== DEMO 1: Podstawowe wywołanie ===\n");
    Console.Write("Wpisz pytanie: ");
    var input = Console.ReadLine() ?? "Hello!";

    Console.WriteLine("\n⏳ Wysyłam zapytanie...\n");
    var response = await service.SendMessageAsync(input);

    if (response?.choices.Count > 0)
    {
        Console.WriteLine($"🤖 Odpowiedź: {response.choices[0].message.content}");
        Console.WriteLine($"\n📊 Tokeny: {response.usage.total_tokens}");
    }
}


async Task DemoStreaming() {
    Console.WriteLine("\n=== DEMO 4: Streaming ===\n");
    var prompt = "Napisz coś ciekawego o technologii. (2 zdania)";

    await foreach (var chunk in service.StreamMessageAsync(prompt)) {
        Console.Write(chunk);
        await Task.Delay(100);
    }

    Console.WriteLine();
}


async Task DemoSystemPrompts() {
    Console.WriteLine("\n=== DEMO 5: System Prompts ===\n");

    var charakter = "Zawsze odpowiadaj w popawnym formacie JSON, Pamiętaj że cała twoja odpowiedź musi być w tym formacie.";
    var prompt = "wypisz mi data structure w ktorym moge trzymać informacje o przedstawieniu teatralnym.";


    service.SetSystemPrompt(charakter);
    var response = await service.SendMessageAsync(prompt);

    Console.WriteLine(response?.choices[0].message.content);
    service.ClearSystemPrompt();
}