package com.saas.subscription.dto.response;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * Response DTO for subscription plans.
 * Immutable data transfer object for REST API.
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@JsonInclude(JsonInclude.Include.NON_NULL)
public class SubscriptionPlanResponse implements Serializable {

    private static final long serialVersionUID = 1L;

    private Long id;

    private String name;

    private String description;

    @JsonProperty("monthly_price")
    private BigDecimal monthlyPrice;

    @JsonProperty("annual_price")
    private BigDecimal annualPrice;

    @JsonProperty("max_concurrent_calls")
    private Integer maxConcurrentCalls;

    @JsonProperty("max_ai_minutes")
    private Integer maxAiMinutes;

    @JsonProperty("max_ai_agents")
    private Integer maxAiAgents;

    @JsonProperty("max_users")
    private Integer maxUsers;

    @JsonProperty("max_phone_numbers")
    private Integer maxPhoneNumbers;

    @JsonProperty("storage_quota_gb")
    private Integer storageQuotaGb;

    @JsonProperty("stripe_product_id")
    private String stripeProductId;

    @JsonProperty("stripe_price_id")
    private String stripePriceId;

    @JsonProperty("is_active")
    private Boolean isActive;

    @JsonProperty("created_at")
    private LocalDateTime createdAt;

    @JsonProperty("updated_at")
    private LocalDateTime updatedAt;

    @JsonProperty("created_by")
    private String createdBy;

    @JsonProperty("updated_by")
    private String updatedBy;
}
