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.time.LocalDateTime;
import java.util.Map;

/**
 * Generic Webhook Event for VoIP providers (Twilio, Telnyx, Ziwo, Vapi.ai, Retell)
 * 
 * Published by webhook controllers → Consumed asynchronously for processing
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class WebhookEvent {
    
    /**
     * Unique event ID (for idempotency and deduplication)
     */
    private String eventId;
    
    /**
     * VoIP provider (TWILIO, TELNYX, ZIWO, VAPI_AI, RETELL)
     */
    private Provider provider;
    
    /**
     * Webhook type (call.started, call.ended, status-update, etc.)
     */
    private String eventType;
    
    /**
     * Tenant ID (for multi-tenant routing)
     */
    private String tenantId;
    
    /**
     * Phone number (from/to)
     */
    private String phoneNumber;
    
    /**
     * Call SID / Conversation ID
     */
    private String callId;
    
    /**
     * Raw webhook payload (provider-specific JSON)
     */
    private Map<String, Object> payload;
    
    /**
     * Event creation timestamp
     */
    private LocalDateTime timestamp;
    
    /**
     * Retry count (for dead letter queue)
     */
    @Builder.Default
    private Integer retryCount = 0;
}
