package com.saas.tenant.repository;

import com.saas.shared.enums.KnowledgeType;
import com.saas.tenant.entity.TenantAIKnowledge;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

@Repository
public interface TenantAIKnowledgeRepository extends JpaRepository<TenantAIKnowledge, Long> {

    /**
     * Find active knowledge by tenant and type
     */
    Optional<TenantAIKnowledge> findByTenantIdAndKnowledgeTypeAndIsActiveTrue(
            String tenantId,
            KnowledgeType knowledgeType);

    /**
     * Find all active knowledge for a tenant
     */
    List<TenantAIKnowledge> findByTenantIdAndIsActiveTrue(String tenantId);

    /**
     * Find knowledge by tenant and type (including inactive)
     */
    List<TenantAIKnowledge> findByTenantIdAndKnowledgeTypeOrderByVersionDesc(
            String tenantId,
            KnowledgeType knowledgeType);

    /**
     * Find latest version for a specific type
     */
    @Query("SELECT k FROM TenantAIKnowledge k WHERE k.tenantId = :tenantId " +
            "AND k.knowledgeType = :type ORDER BY k.version DESC LIMIT 1")
    Optional<TenantAIKnowledge> findLatestByTenantAndType(String tenantId, KnowledgeType type);

    /**
     * Count versions for a tenant and type
     */
    long countByTenantIdAndKnowledgeType(String tenantId, KnowledgeType knowledgeType);

    /**
     * Delete old versions (keep only last N)
     */
    @Query("DELETE FROM TenantAIKnowledge k WHERE k.tenantId = :tenantId " +
            "AND k.knowledgeType = :type AND k.version < :minVersion")
    void deleteOldVersions(String tenantId, KnowledgeType type, int minVersion);
}
