using Friflo.Engine.ECS;
using Microsoft.Xna.Framework;
using MrGameEng.Net;

namespace LittleSim.Web;

// ВНИМАНИЕ: бинарное зеркало сетевого контракта десктопа (src/LittleSim/Net/NetSchema.cs).
// Веб-клиент не может ссылаться на LittleSim/MrGameEng.Graphics (они собраны против
// MonoGame DesktopGL, а тут KNI), поэтому реплицируемые компоненты продублированы
// со СТРОГО тем же лейаутом и порядком регистрации. Меняешь схему там — меняй здесь.
// Уйдёт после пер-платформенной сборки графических библиотек (см. docs/web-client.md).

/// <summary>Зеркало MrGameEng.Graphics.Transform2D: Position(8) + Rotation(4) + Scale(8).</summary>
public struct NetTransform : IComponent
{
    /// <summary>Позиция в мировых координатах.</summary>
    public Vector2 Position;

    /// <summary>Поворот в радианах.</summary>
    public float Rotation;

    /// <summary>Масштаб (у жителей — размер квада в пикселях).</summary>
    public Vector2 Scale;
}

/// <summary>Зеркало LittleSim.Sim.PawnNeeds: Energy(4).</summary>
public struct NetPawnNeeds : IComponent
{
    /// <summary>Запас сил жителя в [0, 1] — затемняет спрайт.</summary>
    public float Energy;
}

/// <summary>Схема репликации веб-клиента — порядок тот же, что в NetSchema десктопа.</summary>
public static class WebNetSchema
{
    /// <summary>Порт сервера по умолчанию (NetSchema.DefaultPort).</summary>
    public const int DefaultPort = 9050;

    /// <summary>Transform2D → NetTransform, PawnNeeds → NetPawnNeeds.</summary>
    public static ReplicationSchema Create() =>
        new ReplicationSchema().Register<NetTransform>().Register<NetPawnNeeds>();
}
