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

import com.kamco.cd.training.model.dto.ModelTrainMngDto;
import com.kamco.cd.training.model.dto.ModelTrainMngDto.ListDto;
import com.kamco.cd.training.postgres.entity.ModelMasterEntity;
import com.kamco.cd.training.train.dto.TrainRunRequest;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import org.springframework.data.domain.Page;

public interface ModelMngRepositoryCustom {

  /**
   * 모델 목록 조회
   *
   * @param searchReq
   * @return
   */
  Page<ListDto> findByModels(ModelTrainMngDto.SearchReq searchReq);

  Optional<ModelMasterEntity> findByUuid(UUID uuid);

  // TODO 미사용시작
  Optional<ModelMasterEntity> findFirstByStatusCdAndDelYn(String statusCd, Boolean delYn);

  // TODO 미사용 끝

  TrainRunRequest findTrainRunRequest(Long modelId);

  Long findModelStep1InProgressCnt();

  /**
   * 모델 번호와 삭제 여부로 모델 조회 (최신순)
   *
   * @param modelNo 모델 번호 (G1, G2, G3, G4)
   * @param delYn 삭제 여부
   * @return 모델 목록
   */
  List<ModelMasterEntity> findByModelNoAndDelYnOrderByCreatedDttmDesc(
      String modelNo, Boolean delYn);

  /**
   * 하이퍼파라미터 ID로 모델 조회
   *
   * @param hyperParamId 하이퍼파라미터 ID
   * @return 모델 목록
   */
  List<ModelMasterEntity> findByHyperParamId(Long hyperParamId);

  /**
   * 학습 진행중인 모델 type, uuid 조회
   *
   * @return
   */
  ModelTrainMngDto.InProgressModel findInprogressModel();

  ModelTrainMngDto.ProgressPercent findTrainProgressPercent(Long id);
}
