package com.kamco.cd.training.postgres.repository.hyperparam;

import com.kamco.cd.training.common.enums.ModelType;
import com.kamco.cd.training.hyperparam.dto.HyperParamDto;
import com.kamco.cd.training.hyperparam.dto.HyperParamDto.SearchReq;
import com.kamco.cd.training.postgres.entity.ModelHyperParamEntity;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import org.springframework.data.domain.Page;

public interface HyperParamRepositoryCustom {

  // TODO 미사용시작
  /**
   * 마지막 버전 조회
   *
   * @return
   */
  @Deprecated
  Optional<ModelHyperParamEntity> findHyperParamVer();

  // TODO 미사용 끝

  /**
   * 모델 타입별 마지막 버전 조회
   *
   * @param modelType 모델 타입
   * @return
   */
  Optional<ModelHyperParamEntity> findHyperParamVerByModelType(ModelType modelType);

  // TODO 미사용시작
  Optional<ModelHyperParamEntity> findHyperParamByHyperVer(String hyperVer);

  // TODO 미사용 끝

  /**
   * 하이퍼 파라미터 상세조회
   *
   * @param uuid
   * @return
   */
  Optional<ModelHyperParamEntity> findHyperParamByUuid(UUID uuid);

  /**
   * 하이퍼 파라미터 목록 조회
   *
   * @param model
   * @param req
   * @return
   */
  Page<HyperParamDto.List> findByHyperVerList(ModelType model, SearchReq req);

  /**
   * 하이퍼 파라미터 모델타입으로 조회
   *
   * @param modelType
   * @return
   */
  List<ModelHyperParamEntity> getHyperParamByType(ModelType modelType);
}
