namespace WebClientTpos.Server.Models;

// ═══════════════════════════════════════════════════════════════════════════════
// EN: Request/Response DTOs for BFF endpoints — extracted from BffDataController.
// VI: DTOs request/response cho BFF endpoints — trích xuất từ BffDataController.
// ═══════════════════════════════════════════════════════════════════════════════

// ═══ Catalog ═══
public record CreateProductRequest(Guid ShopId, string Name, string? Description, decimal Price, string? Type, string? Sku, string? ImageUrl);
public record CreateCategoryRequest(Guid ShopId, string Name, string? Description, int DisplayOrder);

// ═══ Staff ═══
public record CreateStaffRequest(Guid MerchantId, string? EmployeeCode, string? Phone, string? Email, string? Role);
public record CreateScheduleRequest(Guid ShopId, Guid StaffId, int DayOfWeek, string StartTime, string EndTime);

// ═══ Orders & POS ═══
public record CreatePosOrderRequest(Guid ShopId, string? PaymentMethod, List<PosOrderItemRequest> Items);
public record PosOrderItemRequest(Guid ProductId, string ProductName, int Quantity, decimal UnitPrice);

// ═══ Inventory ═══
public record UpdateInventoryRequest(int Quantity, int ReorderLevel);

// ═══ Shop ═══
public record UpdateShopRequest(string? Name, string? Phone, string? Email, string? Description, string? OpenTime, string? CloseTime, string? OpenDays);
public record UpdateShopSettingsRequest(string? FeaturesConfig, string? OpenTime, string? CloseTime, string? OpenDays);

// ═══ Campaigns / Promotions ═══
public record CreateCampaignRequest(string Name, string? Description, decimal FaceValue, int TotalVouchers, DateTime StartDate, DateTime EndDate);

// ═══ Membership ═══
public record CreateMemberRequest(string? Gender, string? CountryCode);
public record UpdateMemberRequest(string? Gender, string? Preferences);

// ═══ F&B — Tables ═══
public record CreateTableRequest(Guid ShopId, string TableNumber, int Capacity, string? Zone);

// ═══ Booking — Appointments ═══
public record CreateAppointmentRequest(Guid ShopId, Guid? CustomerId, Guid? StaffId, Guid? ResourceId, Guid? ServiceId, DateTime StartTime, DateTime EndTime, string? Status = null);

// ═══ Booking — Resources ═══
public record CreateResourceRequest(Guid ShopId, string Name, string ResourceType, int Capacity);

// ═══ F&B — Kitchen ═══
public record UpdateTicketStatusRequest(string Status);

// ═══ F&B — Recipes ═══
public record CreateRecipeRequest(Guid ShopId, Guid ProductId, string Name, string? Instructions, int PrepTimeMinutes, List<RecipeIngredientRequest>? Ingredients);
public record RecipeIngredientRequest(string IngredientName, decimal Quantity, string Unit, decimal CostPerUnit);

// ═══ Payment ═══
public record PayOrderBffRequest(string? PaymentMethod, decimal? AmountTendered, string? ReturnUrl);

// ═══ Reports (unused DTO kept for reference) ═══
public record TopProductItem(string ProductName, long TotalSold, decimal TotalRevenue);
