package com.sonymusic.dx.dxadvsearchservice.service;

import com.sonymusic.dx.dxadvsearchservice.dto.LanguageDTO;
import com.sonymusic.dx.persistence.gras.Language;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import jakarta.persistence.TypedQuery;
import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.CriteriaQuery;
import jakarta.persistence.criteria.Root;
import org.springframework.stereotype.Service;
import jakarta.persistence.criteria.Predicate;
import java.util.List;

@Service
public class LanguageService {

    @PersistenceContext(name = "dx-gras-persistence")
    private EntityManager em;

    public List<LanguageDTO> getListOfLanguages(String name) {
        CriteriaBuilder cb = em.getCriteriaBuilder();
        CriteriaQuery<LanguageDTO> cq=cb.createQuery(LanguageDTO.class);
        Root<Language> root =cq.from(Language.class);
        cq.select(cb.construct(
                LanguageDTO.class,
                root.get("languageKey"),
                root.get("languageName"),
                root.get("ietfLangScriptTag")
        ));
        if (name !=null){
            Predicate predicate = cb.like(cb.lower(root.get("languageName")), name.toLowerCase() +"%");
            cq.where(predicate);
        }
        cq.orderBy(cb.asc(
                cb.selectCase()
                        .when(cb.equal(cb.lower(root.get("languageName")),"english"),0).otherwise(1)),
                cb.asc(root.get("languageName")));
        
        TypedQuery<LanguageDTO> query = em.createQuery(cq);

        List<LanguageDTO> resultSet = query.getResultList();

        return resultSet;
    }
}
