package com.saas.admin.entity;

import com.saas.shared.enums.Provider;
import jakarta.persistence.*;
import lombok.*;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;

import java.time.LocalDateTime;

@Entity
@Table(name = "phone_numbers", indexes = {
        @Index(name = "idx_phone_number", columnList = "phoneNumber", unique = true),
        @Index(name = "idx_tenant_id", columnList = "tenantId"),
        @Index(name = "idx_provider", columnList = "provider")
})
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class PhoneNumber {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false, unique = true, length = 255)
    private String phoneNumber;

    @Column(nullable = false, length = 100)
    private String tenantId;

    @Enumerated(EnumType.STRING)
    @Column(nullable = false, length = 20)
    @Builder.Default
    private Provider provider = Provider.TWILIO;

    @Column(length = 100)
    private String friendlyName;

    @Column(nullable = false)
    @Builder.Default
    private Boolean isActive = true;

    @Column(length = 500)
    private String description;
    
    /**
     * Telnyx Connection ID (for Telnyx provider)
     * Used for AI-powered call routing with Telnyx Voice AI
     */
    @Column(length = 200)
    private String telnyxConnectionId;
    
    /**
     * Vapi Assistant ID (for Vapi provider)
     * Links this phone number to a specific Vapi.ai assistant
     */
    @Column(length = 200)
    private String vapiAssistantId;

    @CreationTimestamp
    @Column(nullable = false, updatable = false)
    private LocalDateTime createdAt;

    @UpdateTimestamp
    @Column(nullable = false)
    private LocalDateTime updatedAt;
}
