namespace TakeoutSaaS.TenantApi.Contracts.Product;

/// <summary>
/// 加料组列表查询请求。
/// </summary>
public sealed class ProductAddonGroupListRequest
{
    /// <summary>
    /// 门店 ID。
    /// </summary>
    public string StoreId { get; set; } = string.Empty;

    /// <summary>
    /// 关键字。
    /// </summary>
    public string? Keyword { get; set; }

    /// <summary>
    /// 状态（enabled/disabled）。
    /// </summary>
    public string? Status { get; set; }
}

/// <summary>
/// 保存加料组请求。
/// </summary>
public sealed class SaveProductAddonGroupRequest
{
    /// <summary>
    /// 门店 ID。
    /// </summary>
    public string StoreId { get; set; } = string.Empty;

    /// <summary>
    /// 加料组 ID（编辑时传）。
    /// </summary>
    public string? Id { get; set; }

    /// <summary>
    /// 加料组名称。
    /// </summary>
    public string Name { get; set; } = string.Empty;

    /// <summary>
    /// 加料组描述。
    /// </summary>
    public string Description { get; set; } = string.Empty;

    /// <summary>
    /// 是否必选。
    /// </summary>
    public bool Required { get; set; }

    /// <summary>
    /// 最小可选数。
    /// </summary>
    public int MinSelect { get; set; }

    /// <summary>
    /// 最大可选数。
    /// </summary>
    public int MaxSelect { get; set; }

    /// <summary>
    /// 排序值。
    /// </summary>
    public int Sort { get; set; }

    /// <summary>
    /// 状态（enabled/disabled）。
    /// </summary>
    public string Status { get; set; } = "enabled";

    /// <summary>
    /// 关联商品 ID 列表。
    /// </summary>
    public List<string> ProductIds { get; set; } = [];

    /// <summary>
    /// 加料项列表。
    /// </summary>
    public List<SaveProductAddonItemRequest> Items { get; set; } = [];
}

/// <summary>
/// 保存加料项请求。
/// </summary>
public sealed class SaveProductAddonItemRequest
{
    /// <summary>
    /// 加料项 ID（编辑时传）。
    /// </summary>
    public string? Id { get; set; }

    /// <summary>
    /// 加料项名称。
    /// </summary>
    public string Name { get; set; } = string.Empty;

    /// <summary>
    /// 加价金额。
    /// </summary>
    public decimal Price { get; set; }

    /// <summary>
    /// 库存数量。
    /// </summary>
    public int Stock { get; set; } = 999;

    /// <summary>
    /// 排序值。
    /// </summary>
    public int Sort { get; set; }

    /// <summary>
    /// 状态（enabled/disabled）。
    /// </summary>
    public string Status { get; set; } = "enabled";
}

/// <summary>
/// 删除加料组请求。
/// </summary>
public sealed class DeleteProductAddonGroupRequest
{
    /// <summary>
    /// 门店 ID。
    /// </summary>
    public string StoreId { get; set; } = string.Empty;

    /// <summary>
    /// 加料组 ID。
    /// </summary>
    public string GroupId { get; set; } = string.Empty;
}

/// <summary>
/// 修改加料组状态请求。
/// </summary>
public sealed class ChangeProductAddonGroupStatusRequest
{
    /// <summary>
    /// 门店 ID。
    /// </summary>
    public string StoreId { get; set; } = string.Empty;

    /// <summary>
    /// 加料组 ID。
    /// </summary>
    public string GroupId { get; set; } = string.Empty;

    /// <summary>
    /// 状态（enabled/disabled）。
    /// </summary>
    public string Status { get; set; } = "enabled";
}

/// <summary>
/// 绑定加料组商品请求。
/// </summary>
public sealed class BindProductAddonGroupProductsRequest
{
    /// <summary>
    /// 门店 ID。
    /// </summary>
    public string StoreId { get; set; } = string.Empty;

    /// <summary>
    /// 加料组 ID。
    /// </summary>
    public string GroupId { get; set; } = string.Empty;

    /// <summary>
    /// 商品 ID 列表。
    /// </summary>
    public List<string> ProductIds { get; set; } = [];
}

/// <summary>
/// 加料项响应。
/// </summary>
public sealed class ProductAddonItemResponse
{
    /// <summary>
    /// 加料项 ID。
    /// </summary>
    public string Id { get; set; } = string.Empty;

    /// <summary>
    /// 加料项名称。
    /// </summary>
    public string Name { get; set; } = string.Empty;

    /// <summary>
    /// 加价金额。
    /// </summary>
    public decimal Price { get; set; }

    /// <summary>
    /// 库存数量。
    /// </summary>
    public int Stock { get; set; }

    /// <summary>
    /// 排序值。
    /// </summary>
    public int Sort { get; set; }

    /// <summary>
    /// 状态（enabled/disabled）。
    /// </summary>
    public string Status { get; set; } = "enabled";
}

/// <summary>
/// 加料组响应。
/// </summary>
public sealed class ProductAddonGroupItemResponse
{
    /// <summary>
    /// 加料组 ID。
    /// </summary>
    public string Id { get; set; } = string.Empty;

    /// <summary>
    /// 加料组名称。
    /// </summary>
    public string Name { get; set; } = string.Empty;

    /// <summary>
    /// 描述。
    /// </summary>
    public string Description { get; set; } = string.Empty;

    /// <summary>
    /// 是否必选。
    /// </summary>
    public bool Required { get; set; }

    /// <summary>
    /// 最小可选数。
    /// </summary>
    public int MinSelect { get; set; }

    /// <summary>
    /// 最大可选数。
    /// </summary>
    public int MaxSelect { get; set; }

    /// <summary>
    /// 排序值。
    /// </summary>
    public int Sort { get; set; }

    /// <summary>
    /// 状态（enabled/disabled）。
    /// </summary>
    public string Status { get; set; } = "enabled";

    /// <summary>
    /// 关联商品数量。
    /// </summary>
    public int ProductCount { get; set; }

    /// <summary>
    /// 关联商品 ID 列表。
    /// </summary>
    public List<string> ProductIds { get; set; } = [];

    /// <summary>
    /// 加料项列表。
    /// </summary>
    public List<ProductAddonItemResponse> Items { get; set; } = [];

    /// <summary>
    /// 更新时间。
    /// </summary>
    public string UpdatedAt { get; set; } = string.Empty;
}
