package com.saas.tenant.repository;

import com.saas.tenant.entity.MedicalService;
import com.saas.tenant.entity.ServiceType;
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.util.List;

@Repository
public interface MedicalServiceRepository extends JpaRepository<MedicalService, Long> {

        List<MedicalService> findByType(ServiceType type);

        List<MedicalService> findByDoctorId(Long doctorId);

        @Query("SELECT m FROM MedicalService m WHERE m.doctorId IS NULL")
        List<MedicalService> findStandardServices();

        @Query("SELECT m FROM MedicalService m WHERE m.keywords LIKE CONCAT('%', :keyword, '%')")
        List<MedicalService> findByKeyword(@Param("keyword") String keyword);

        @Query("SELECT m FROM MedicalService m WHERE m.associatedSymptoms LIKE CONCAT('%', :symptom, '%')")
        List<MedicalService> findBySymptom(@Param("symptom") String symptom);

        @Query("SELECT m FROM MedicalService m WHERE m.requiresResource = true AND m.requiredResourceType = :resourceType")
        List<MedicalService> findByRequiredResourceType(
                        @Param("resourceType") com.saas.tenant.entity.ResourceType resourceType);

        @Query("SELECT m FROM MedicalService m WHERE LOWER(m.name) LIKE LOWER(CONCAT('%', :searchTerm, '%')) " +
                        "OR LOWER(m.description) LIKE LOWER(CONCAT('%', :searchTerm, '%'))")
        List<MedicalService> searchByNameOrDescription(@Param("searchTerm") String searchTerm);
}
