package com.saas.shared.dto;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.math.BigDecimal;
import java.util.Map;

/**
 * DTO for AI cost calculation results
 * 
 * Clean Architecture:
 * - Decouples calculation logic from persistence
 * - Immutable value object for cost data transfer
 * - Used by AiCostCalculator implementations
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AiCostCalculationResult {
    
    /**
     * AI Provider (OPENAI, ELEVENLABS, GEMINI, etc.)
     */
    private String aiProvider;
    
    /**
     * Cost type (REALTIME_API, TTS, STT, LLM, etc.)
     */
    private String costType;
    
    /**
     * Calculated cost
     */
    private BigDecimal cost;
    
    /**
     * Currency (default: USD)
     */
    @Builder.Default
    private String currency = "USD";
    
    /**
     * Usage details (tokens, characters, duration, etc.)
     * 
     * Examples:
     * {"input_audio_tokens": 12500, "output_audio_tokens": 8300}
     * {"characters": 1250, "model": "eleven_turbo_v2"}
     */
    private Map<String, Object> usageDetails;
    
    /**
     * Optional metadata (request_id, model, latency, etc.)
     */
    private Map<String, Object> metadata;
    
    /**
     * Check if calculation was successful
     */
    public boolean isValid() {
        return aiProvider != null 
               && costType != null 
               && cost != null 
               && cost.compareTo(BigDecimal.ZERO) >= 0;
    }
}
