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

import com.kamco.cd.training.model.dto.ModelTrainDetailDto.DetailSummary;
import com.kamco.cd.training.model.dto.ModelTrainDetailDto.HyperSummary;
import com.kamco.cd.training.model.dto.ModelTrainDetailDto.MappingDataset;
import com.kamco.cd.training.model.dto.ModelTrainDetailDto.ModelBestEpoch;
import com.kamco.cd.training.model.dto.ModelTrainDetailDto.ModelFileInfo;
import com.kamco.cd.training.model.dto.ModelTrainDetailDto.ModelTestMetrics;
import com.kamco.cd.training.model.dto.ModelTrainDetailDto.ModelTrainMetrics;
import com.kamco.cd.training.model.dto.ModelTrainDetailDto.ModelValidationMetrics;
import com.kamco.cd.training.model.dto.ModelTrainDetailDto.TransferHyperSummary;
import com.kamco.cd.training.model.dto.ModelTrainMngDto.ModelProgressStepDto;
import com.kamco.cd.training.postgres.entity.ModelMasterEntity;
import java.util.List;
import java.util.Optional;
import java.util.UUID;

public interface ModelDetailRepositoryCustom {

  Optional<ModelMasterEntity> findByUuid(UUID uuid);

  DetailSummary getModelDetailSummary(UUID uuid);

  HyperSummary getByModelHyperParamSummary(UUID uuid);

  // TODO 미사용시작
  TransferHyperSummary getByModelTransferHyperParamSummary(UUID uuid);

  // TODO 미사용 끝

  List<MappingDataset> getByModelMappingDataset(UUID uuid);

  ModelMasterEntity findByModelByUUID(UUID uuid);

  List<ModelTrainMetrics> getModelTrainMetricResult(UUID uuid);

  List<ModelValidationMetrics> getModelValidationMetricResult(UUID uuid);

  List<ModelTestMetrics> getModelTestMetricResult(UUID uuid);

  ModelBestEpoch getModelTrainBestEpoch(UUID uuid);

  ModelFileInfo getModelTrainFileInfo(UUID uuid);

  List<ModelProgressStepDto> findModelTrainProgressInfo(UUID uuid);

  ModelMasterEntity findByModelBeforeId(Long beforeModelId);
}
