package com.saas.subscription.dto.request;

import com.fasterxml.jackson.annotation.JsonProperty;
import jakarta.validation.constraints.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.math.BigDecimal;

/**
 * Request DTO for creating/updating subscription plans.
 * Validated on controller boundary.
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class CreateSubscriptionPlanRequest {

    @NotBlank(message = "Plan name is required")
    @Size(min = 3, max = 100, message = "Plan name must be between 3 and 100 characters")
    private String name;

    @NotBlank(message = "Description is required")
    @Size(min = 10, max = 500, message = "Description must be between 10 and 500 characters")
    private String description;

    @NotNull(message = "Monthly price is required")
    @DecimalMin(value = "0.00", message = "Monthly price cannot be negative")
    @DecimalMax(value = "9999.99", message = "Monthly price is too high")
    @JsonProperty("monthly_price")
    private BigDecimal monthlyPrice;

    @DecimalMin(value = "0.00", message = "Annual price cannot be negative")
    @DecimalMax(value = "9999.99", message = "Annual price is too high")
    @JsonProperty("annual_price")
    private BigDecimal annualPrice;

    @NotNull(message = "Max concurrent calls is required")
    @Min(value = 1, message = "Max concurrent calls must be at least 1")
    @Max(value = 1000, message = "Max concurrent calls exceeds limit")
    @JsonProperty("max_concurrent_calls")
    private Integer maxConcurrentCalls;

    @NotNull(message = "Max AI minutes is required")
    @Min(value = 1, message = "Max AI minutes must be at least 1")
    @Max(value = 100000, message = "Max AI minutes exceeds limit")
    @JsonProperty("max_ai_minutes")
    private Integer maxAiMinutes;

    @NotNull(message = "Max AI agents is required")
    @Min(value = 1, message = "Max AI agents must be at least 1")
    @Max(value = 100, message = "Max AI agents exceeds limit")
    @JsonProperty("max_ai_agents")
    private Integer maxAiAgents;

    @NotNull(message = "Max users is required")
    @Min(value = 1, message = "Max users must be at least 1")
    @Max(value = 10000, message = "Max users exceeds limit")
    @JsonProperty("max_users")
    private Integer maxUsers;

    @NotNull(message = "Max phone numbers is required")
    @Min(value = 1, message = "Max phone numbers must be at least 1")
    @Max(value = 1000, message = "Max phone numbers exceeds limit")
    @JsonProperty("max_phone_numbers")
    private Integer maxPhoneNumbers;

    @NotNull(message = "Storage quota is required")
    @Min(value = 1, message = "Storage quota must be at least 1 GB")
    @Max(value = 10000, message = "Storage quota exceeds limit")
    @JsonProperty("storage_quota_gb")
    private Integer storageQuotaGb;
}
