using LittleSim.Content;
using LittleSim.Net;
using LittleSim.Scenes;
using Microsoft.Xna.Framework;
using MrGameEng.Genetics;
using MrGameEng.Host;

// Контент-линт без окна/GPU: грузит моды/дефы (патчи и валидаторы тоже), компилирует формулы генов
// (включая группировку gsum) и выходит. Удобно для CI.
if (args.Contains("--check-content"))
{
    try
    {
        var content = GameContent.Load();
        var genes = content.Defs.All<GeneDef>();
        var registry = genes.ToDictionary(g => g.DefName, g => g, StringComparer.Ordinal);
        var traits = Phenotype.Compute(Genome.Generate(genes, new Random(1)), registry);
        Console.WriteLine(
            $"content ok: {content.Defs.TypeKeys.Count} def types, {genes.Count} genes, "
                + $"{content.Defs.NamesOf("Plant").Count} plants, {traits.Count} traits "
                + $"(hardiness={traits.GetValueOrDefault("hardiness"):0.##})"
        );
        return;
    }
    catch (Exception error)
    {
        Console.Error.WriteLine($"content FAILED: {error.Message}");
        Environment.Exit(1);
        return;
    }
}

// --connect [ws://host:port] — после загрузки контента сразу в сетевую сцену
// (см. MultiplayerScene); без аргументов — обычный запуск в главное меню.
string? connect = null;
var connectIndex = Array.IndexOf(args, "--connect");
if (connectIndex >= 0)
{
    connect =
        connectIndex + 1 < args.Length && !args[connectIndex + 1].StartsWith("--")
            ? args[connectIndex + 1]
            : $"ws://localhost:{NetSchema.DefaultPort}/";
}

// Контент Core-мода грузится уже в окне — на загрузочном экране (BootScene), в фоне.
using var host = new GameHost(
    new GameHostOptions
    {
        Title = "LittleSim",
        Width = 1280,
        Height = 720,
        ClearColor = new Color(12, 16, 24),
    },
    new BootScene(connect)
);

host.Run();
