namespace TakeoutSaaS.TenantApi.Contracts.Product;

/// <summary>
/// 规格做法列表查询请求。
/// </summary>
public sealed class ProductSpecListRequest
{
    /// <summary>
    /// 门店 ID。
    /// </summary>
    public string StoreId { get; set; } = string.Empty;

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

    /// <summary>
    /// 模板类型（spec/method）。
    /// </summary>
    public string? Type { get; set; }

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

/// <summary>
/// 保存规格做法模板请求。
/// </summary>
public sealed class SaveProductSpecRequest
{
    /// <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>
    /// 模板类型（spec/method）。
    /// </summary>
    public string Type { get; set; } = "spec";

    /// <summary>
    /// 选择方式（single/multi）。
    /// </summary>
    public string SelectionType { get; set; } = "single";

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

    /// <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<SaveProductSpecValueRequest> Values { get; set; } = [];
}

/// <summary>
/// 保存规格做法模板选项请求。
/// </summary>
public sealed class SaveProductSpecValueRequest
{
    /// <summary>
    /// 选项 ID（编辑时传）。
    /// </summary>
    public string? Id { get; set; }

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

    /// <summary>
    /// 附加价格。
    /// </summary>
    public decimal ExtraPrice { get; set; }

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

/// <summary>
/// 删除规格做法模板请求。
/// </summary>
public sealed class DeleteProductSpecRequest
{
    /// <summary>
    /// 门店 ID。
    /// </summary>
    public string StoreId { get; set; } = string.Empty;

    /// <summary>
    /// 模板 ID。
    /// </summary>
    public string SpecId { get; set; } = string.Empty;
}

/// <summary>
/// 规格做法模板状态变更请求。
/// </summary>
public sealed class ChangeProductSpecStatusRequest
{
    /// <summary>
    /// 门店 ID。
    /// </summary>
    public string StoreId { get; set; } = string.Empty;

    /// <summary>
    /// 模板 ID。
    /// </summary>
    public string SpecId { get; set; } = string.Empty;

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

/// <summary>
/// 复制规格做法模板请求。
/// </summary>
public sealed class CopyProductSpecRequest
{
    /// <summary>
    /// 门店 ID。
    /// </summary>
    public string StoreId { get; set; } = string.Empty;

    /// <summary>
    /// 模板 ID。
    /// </summary>
    public string SpecId { get; set; } = string.Empty;

    /// <summary>
    /// 新模板名称（可选）。
    /// </summary>
    public string? NewName { get; set; }
}

/// <summary>
/// 规格做法模板选项响应。
/// </summary>
public sealed class ProductSpecValueResponse
{
    /// <summary>
    /// 选项 ID。
    /// </summary>
    public string Id { get; set; } = string.Empty;

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

    /// <summary>
    /// 附加价格。
    /// </summary>
    public decimal ExtraPrice { get; set; }

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

/// <summary>
/// 规格做法模板列表项响应。
/// </summary>
public sealed class ProductSpecItemResponse
{
    /// <summary>
    /// 模板 ID。
    /// </summary>
    public string Id { get; set; } = string.Empty;

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

    /// <summary>
    /// 模板类型（spec/method）。
    /// </summary>
    public string Type { get; set; } = "spec";

    /// <summary>
    /// 选择方式（single/multi）。
    /// </summary>
    public string SelectionType { get; set; } = "single";

    /// <summary>
    /// 是否必选。
    /// </summary>
    public bool IsRequired { 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<ProductSpecValueResponse> Values { get; set; } = [];

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