package com.saas.shared.event;

import com.saas.shared.enums.Provider;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

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

/**
 * Call Data Event for dual-save pattern (Admin DB + Tenant DB)
 * 
 * Published after webhook processing → Consumed for tenant DB persistence
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CallDataEvent {
    
    /**
     * Unique event ID
     */
    private String eventId;
    
    /**
     * Tenant ID (for routing to tenant DB)
     */
    private String tenantId;
    
    /**
     * Tenant schema name (tenant_acme_corp)
     */
    private String schemaName;
    
    /**
     * VoIP provider
     */
    private Provider provider;
    
    /**
     * Call SID / ID
     */
    private String callSid;
    
    /**
     * From phone number
     */
    private String fromNumber;
    
    /**
     * To phone number
     */
    private String toNumber;
    
    /**
     * Call direction (inbound/outbound)
     */
    private String direction;
    
    /**
     * Call status (completed, failed, busy, etc.)
     */
    private String status;
    
    /**
     * Call duration (seconds)
     */
    private Integer duration;
    
    /**
     * Call cost
     */
    private BigDecimal cost;
    
    /**
     * Conversation transcript (JSON)
     */
    private String transcript;
    
    /**
     * Patient data extracted (JSON)
     */
    private String patientData;
    
    /**
     * Call timestamp
     */
    private LocalDateTime callTime;
    
    /**
     * Admin DB record ID (for linking)
     */
    private Long adminRecordId;
    
    /**
     * Retry count
     */
    @Builder.Default
    private Integer retryCount = 0;
}
