using System.ComponentModel.DataAnnotations;
using System.Text.Json;
using Tiku.Application.Tenancy;
using Tiku.Domain.Common;

namespace Tiku.Api.Contracts;

/// <summary>
/// 保存租户前端配置草稿请求。
/// </summary>
public sealed class SaveTenantFrontendConfigDraftDto
{
    /// <summary>
    /// 品牌配置。
    /// </summary>
    public JsonElement Branding { get; set; } = JsonDefaults.Object();
    /// <summary>
    /// 主题配置。
    /// </summary>
    public JsonElement Theme { get; set; } = JsonDefaults.Object();
    /// <summary>
    /// 功能配置。
    /// </summary>
    public JsonElement Features { get; set; } = JsonDefaults.Object();
    /// <summary>
    /// 导航配置。
    /// </summary>
    public JsonElement Navigation { get; set; } = JsonDefaults.Array();
    /// <summary>
    /// 首页模块配置。
    /// </summary>
    public JsonElement HomeModules { get; set; } = JsonDefaults.Array();

    public TenantFrontendConfigDraft ToDraft() => new(
        Branding,
        Theme,
        Features,
        Navigation,
        HomeModules);
}

/// <summary>
/// 发布租户前端配置请求。
/// </summary>
public sealed class PublishTenantFrontendConfigDto
{
    /// <summary>
    /// 期望配置版本。
    /// </summary>
    [Range(1, int.MaxValue)]
    public int ExpectedVersion { get; set; }
}
