import {
  AssemblyMonitoringDailyQueryDto,
  AssemblyMonitoringProcessesQueryDto,
  AssemblyMonitoringQueryWithFactUnit,
  AssemblyMonitoringRealtimeQueryDto,
  AssemblyMonitoringUnitDetailQueryWithDefaults,
  AssemblyMonitoringUnitListQueryWithDefaults,
} from './dto/request';
import { AssemblyMonitoringProcColumnRowDbDto } from './dto/internal/proc-column-row.db.dto';
import { AssemblyMonitoringRealtimeDbResultDto } from './dto/internal/realtime-result.db.dto';
import { AssemblyMonitoringUnitProcessStatusDbDto } from './dto/internal/unit-process-status.db.dto';
import { AssemblyMonitoringUnitDetailDbDto } from './dto/internal/unit-detail.db.dto';
import { AssemblyMonitoringUnitListResponseDto } from './dto/response/unit-list.response.dto';

export abstract class AssemblyMonitoringRepository {
  abstract findRealtimeData(
    req: AssemblyMonitoringQueryWithFactUnit<AssemblyMonitoringRealtimeQueryDto>,
  ): Promise<AssemblyMonitoringRealtimeDbResultDto>;

  abstract findDailyData(
    req: AssemblyMonitoringQueryWithFactUnit<AssemblyMonitoringDailyQueryDto>,
  ): Promise<AssemblyMonitoringProcColumnRowDbDto[]>;

  abstract findProcesses(
    req: AssemblyMonitoringQueryWithFactUnit<AssemblyMonitoringProcessesQueryDto>,
  ): Promise<AssemblyMonitoringUnitProcessStatusDbDto[]>;

  abstract findWaitingProcesses(
    req: AssemblyMonitoringQueryWithFactUnit<AssemblyMonitoringProcessesQueryDto>,
  ): Promise<AssemblyMonitoringUnitProcessStatusDbDto[]>;

  abstract findUnitList(
    req: AssemblyMonitoringUnitListQueryWithDefaults,
  ): Promise<AssemblyMonitoringUnitListResponseDto[]>;

  abstract findUnitDetail(
    req: AssemblyMonitoringUnitDetailQueryWithDefaults,
  ): Promise<AssemblyMonitoringUnitDetailDbDto[]>;
}
