namespace TakeoutSaaS.TenantApi.Contracts.Product;

/// <summary>
/// 分类列表查询请求。
/// </summary>
public sealed class ProductCategoryListRequest
{
    /// <summary>
    /// 门店 ID。
    /// </summary>
    public string StoreId { get; set; } = string.Empty;
}

/// <summary>
/// 分类管理列表查询请求。
/// </summary>
public sealed class ProductCategoryManageListRequest
{
    /// <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 SaveProductCategoryRequest
{
    /// <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 string Icon { get; set; } = string.Empty;

    /// <summary>
    /// 渠道列表。
    /// </summary>
    public List<string> Channels { get; set; } = [];

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

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

/// <summary>
/// 删除分类请求。
/// </summary>
public sealed class DeleteProductCategoryRequest
{
    /// <summary>
    /// 门店 ID。
    /// </summary>
    public string StoreId { get; set; } = string.Empty;

    /// <summary>
    /// 分类 ID。
    /// </summary>
    public string CategoryId { get; set; } = string.Empty;
}

/// <summary>
/// 变更分类状态请求。
/// </summary>
public sealed class ChangeProductCategoryStatusRequest
{
    /// <summary>
    /// 门店 ID。
    /// </summary>
    public string StoreId { get; set; } = string.Empty;

    /// <summary>
    /// 分类 ID。
    /// </summary>
    public string CategoryId { get; set; } = string.Empty;

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

/// <summary>
/// 分类排序请求项。
/// </summary>
public sealed class ProductCategorySortItemRequest
{
    /// <summary>
    /// 分类 ID。
    /// </summary>
    public string CategoryId { get; set; } = string.Empty;

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

/// <summary>
/// 分类排序请求。
/// </summary>
public sealed class SortProductCategoryRequest
{
    /// <summary>
    /// 门店 ID。
    /// </summary>
    public string StoreId { get; set; } = string.Empty;

    /// <summary>
    /// 排序项。
    /// </summary>
    public List<ProductCategorySortItemRequest> Items { get; set; } = [];
}

/// <summary>
/// 分类绑定商品请求。
/// </summary>
public sealed class BindCategoryProductsRequest
{
    /// <summary>
    /// 门店 ID。
    /// </summary>
    public string StoreId { get; set; } = string.Empty;

    /// <summary>
    /// 分类 ID。
    /// </summary>
    public string CategoryId { get; set; } = string.Empty;

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

/// <summary>
/// 分类解绑商品请求。
/// </summary>
public sealed class UnbindCategoryProductRequest
{
    /// <summary>
    /// 门店 ID。
    /// </summary>
    public string StoreId { get; set; } = string.Empty;

    /// <summary>
    /// 分类 ID。
    /// </summary>
    public string CategoryId { get; set; } = string.Empty;

    /// <summary>
    /// 商品 ID。
    /// </summary>
    public string ProductId { get; set; } = string.Empty;
}

/// <summary>
/// 商品选择器查询请求。
/// </summary>
public sealed class ProductPickerListRequest
{
    /// <summary>
    /// 门店 ID。
    /// </summary>
    public string StoreId { get; set; } = string.Empty;

    /// <summary>
    /// 分类 ID。
    /// </summary>
    public string? CategoryId { get; set; }

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

    /// <summary>
    /// 返回数量上限。
    /// </summary>
    public int? Limit { get; set; }
}

/// <summary>
/// 分类列表项响应。
/// </summary>
public class ProductCategoryListItemResponse
{
    /// <summary>
    /// 分类 ID。
    /// </summary>
    public string Id { get; set; } = string.Empty;

    /// <summary>
    /// 分类名称。
    /// </summary>
    public string Name { get; set; } = string.Empty;

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

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

/// <summary>
/// 分类管理项响应。
/// </summary>
public sealed class ProductCategoryManageItemResponse : ProductCategoryListItemResponse
{
    /// <summary>
    /// 分类描述。
    /// </summary>
    public string Description { get; set; } = string.Empty;

    /// <summary>
    /// 图标地址。
    /// </summary>
    public string Icon { get; set; } = string.Empty;

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

    /// <summary>
    /// 渠道列表。
    /// </summary>
    public List<string> Channels { get; set; } = [];
}

/// <summary>
/// 分类绑定结果响应。
/// </summary>
public sealed class ProductBindResultResponse
{
    /// <summary>
    /// 总条数。
    /// </summary>
    public int TotalCount { get; set; }

    /// <summary>
    /// 成功条数。
    /// </summary>
    public int SuccessCount { get; set; }

    /// <summary>
    /// 失败条数。
    /// </summary>
    public int FailedCount { get; set; }
}

/// <summary>
/// 商品选择器项响应。
/// </summary>
public sealed class ProductPickerItemResponse
{
    /// <summary>
    /// 商品 ID。
    /// </summary>
    public string Id { get; set; } = string.Empty;

    /// <summary>
    /// 分类 ID。
    /// </summary>
    public string CategoryId { get; set; } = string.Empty;

    /// <summary>
    /// 分类名称。
    /// </summary>
    public string CategoryName { get; set; } = string.Empty;

    /// <summary>
    /// 商品名称。
    /// </summary>
    public string Name { get; set; } = string.Empty;

    /// <summary>
    /// 价格。
    /// </summary>
    public decimal Price { get; set; }

    /// <summary>
    /// SPU 编码。
    /// </summary>
    public string SpuCode { get; set; } = string.Empty;

    /// <summary>
    /// 状态（on_sale/off_shelf/sold_out）。
    /// </summary>
    public string Status { get; set; } = "off_shelf";
}
