namespace NeonSprawl.Server.Game.Skills;

/// <summary>Configuration for loading authoring content from disk (NEO-34).</summary>
public sealed class ContentPathsOptions
{
    public const string SectionName = "Content";

    /// <summary>
    /// Optional. Absolute path, or path relative to <see cref="Microsoft.Extensions.Hosting.IHostEnvironment.ContentRootPath"/>.
    /// When unset, the host walks ancestors of <see cref="AppContext.BaseDirectory"/> for a <c>content/skills</c> directory.
    /// </summary>
    public string? SkillsDirectory { get; set; }

    /// <summary>
    /// Optional override for <c>skill-def.schema.json</c>.
    /// When unset, resolved as <c>{parent of skills directory}/schemas/skill-def.schema.json</c> (same layout as the repo).
    /// </summary>
    public string? SkillDefSchemaPath { get; set; }

    /// <summary>
    /// Optional. Absolute path, or path relative to <see cref="Microsoft.Extensions.Hosting.IHostEnvironment.ContentRootPath"/>.
    /// When unset, the host walks ancestors of <see cref="AppContext.BaseDirectory"/> for a <c>content/mastery</c> directory.
    /// </summary>
    public string? MasteryDirectory { get; set; }

    /// <summary>
    /// Optional override for <c>mastery-catalog.schema.json</c>.
    /// When unset, resolved as <c>{parent of mastery directory}/schemas/mastery-catalog.schema.json</c>.
    /// </summary>
    public string? MasteryCatalogSchemaPath { get; set; }

    /// <summary>
    /// Optional. Absolute path, or path relative to <see cref="Microsoft.Extensions.Hosting.IHostEnvironment.ContentRootPath"/>.
    /// When unset, the host walks ancestors of <see cref="AppContext.BaseDirectory"/> for a <c>content/items</c> directory.
    /// </summary>
    public string? ItemsDirectory { get; set; }

    /// <summary>
    /// Optional override for <c>item-def.schema.json</c>.
    /// When unset, resolved as <c>{parent of items directory}/schemas/item-def.schema.json</c>.
    /// </summary>
    public string? ItemDefSchemaPath { get; set; }
}
