package com.saas.tenant.repository;

import com.saas.tenant.entity.VapiCall;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;

/**
 * Vapi Call Repository (Tenant)
 * 
 * - Operates on tenant-specific database (tenant_X)
 * - NO tenantId filtering needed (physical isolation)
 * - Tracks call history from Vapi.ai voice assistants
 */
@Repository
public interface VapiCallRepository extends JpaRepository<VapiCall, Long> {
    
    Optional<VapiCall> findByVapiCallId(String vapiCallId);
    
    List<VapiCall> findByAssistantId(String assistantId);
    
    List<VapiCall> findByStatus(String status);
    
    List<VapiCall> findByStartTimeBetween(LocalDateTime start, LocalDateTime end);
    
    @Query("SELECT COUNT(v) FROM VapiCall v WHERE v.startTime BETWEEN :start AND :end")
    Long getCallCountBetween(@Param("start") LocalDateTime start, @Param("end") LocalDateTime end);
    
    @Query("SELECT SUM(v.cost) FROM VapiCall v WHERE v.startTime BETWEEN :start AND :end")
    BigDecimal getTotalCostBetween(@Param("start") LocalDateTime start, @Param("end") LocalDateTime end);
    
    @Query("SELECT v.status, COUNT(v) FROM VapiCall v WHERE v.startTime BETWEEN :start AND :end GROUP BY v.status")
    List<Object[]> getCallCountByStatusBetween(@Param("start") LocalDateTime start, @Param("end") LocalDateTime end);
}
