import type { AssemblyMonitoringOverviewResponseDto } from 'src/api/monitoring/cp/assembly/dto/response/overview.response.dto';
import { procColumnRowFixtures } from './db/proc-column-row.fixture';
import { realtimeResultFixtures } from './db/realtime-result.fixture';
import { unitDetailFixtures } from './db/unit-detail.fixture';
import { unitProcessStatusFixtures } from './db/unit-process-status.fixture';
import { assemblyQueryFixtures } from './query.fixture';
import { createOverviewResponse } from './response.fixture';

export const assemblyServiceFixtures = {
  emptyList: [] as unknown[],
  emptyInactiveWorkers:
    [] as AssemblyMonitoringOverviewResponseDto['inactiveWorkers'],
  realtimeQuery: assemblyQueryFixtures.realtimeQuery,
  realtimeExpectedQuery: assemblyQueryFixtures.realtimeExpectedQuery,
  realtimeResult: realtimeResultFixtures.empty,
  dailyQuery: assemblyQueryFixtures.dailyQuery,
  dailyExpectedQuery: assemblyQueryFixtures.dailyExpectedQuery,
  processesQuery: assemblyQueryFixtures.processesQuery,
  processStatusRows: unitProcessStatusFixtures.serviceRows,
  processStatusExpectedMatch: {
    model: 'CP42RZ1',
    serialNo: '1038',
    status: 'in_progress',
  },
  waitingProcessRows: unitProcessStatusFixtures.waitingRows,
  waitingProcessExpectedMatch: {
    status: 'completed',
  },
  unitListQuery: assemblyQueryFixtures.unitListQuery,
  unitListNow: assemblyQueryFixtures.unitListNow,
  unitListExpectedQuery: assemblyQueryFixtures.unitListExpectedQuery,
  unitDetailQuery: assemblyQueryFixtures.unitDetailQuery,
  unitDetailExpectedQuery: assemblyQueryFixtures.unitDetailExpectedQuery,
  unitDetailMultiTrackRows: unitDetailFixtures.multiTrackRows,
  unitDetailMultiTrackQuery: assemblyQueryFixtures.unitDetailMultiTrackQuery,
  unitDetailMultiTrackExpectedProdPlanSeq: 1,
};

export const assemblyTransformerFixtures = {
  procMapKeyword: 'Drive Unit',
  procMapExpectedProcessName: 'driveUnitAssembly',
  procColumnRows: procColumnRowFixtures.rows,
  procColumnExpectedCount: 1,
  procColumnExpectedItem: {
    model: 'LP690',
    serialNo: '0006',
    processName: 'DriveUnit',
    startTime: '2026-01-05 08:30',
    workerCount: 2,
    inputHours: 1.5,
    workers: ['A', 'B'],
  },
  processStatusRows: unitProcessStatusFixtures.transformerRows,
  processStatusExpectedCount: 1,
  processStatusExpectedItem: {
    model: 'CP42RZ1',
    serialNo: '1038',
    processName: 'DriveUnit',
    startTime: '2026-01-08 13:00',
    workerCount: 3,
    inputHours: 2.5,
    status: 'waiting',
    endTime: '2026-01-09 09:30',
    waitingDays: 4,
  },
  unitDetailRows: unitDetailFixtures.rows,
  unitDetailExpectedTrackCount: 2,
  unitDetailExpectedTrack0: {
    prodPlanSeq: 100,
    prodPlanNo: 'PLAN100',
    modelSeq: 200,
    serialNo: 'S001',
    modelName: 'Model-A',
  },
  unitDetailExpectedTrack0StepCount: 3,
  unitDetailExpectedTrack0Step0: {
    name: 'STEP1',
    status: 'COMPLETED',
    completedAt: '2025-01-01',
    durationMinutes: 80,
    durationText: '1시간 20분',
  },
  unitDetailExpectedTrack0Step1: {
    name: 'STEP2',
    status: 'NOT_STARTED',
    completedAt: null,
    durationMinutes: 40,
    durationText: '40분',
  },
  unitDetailExpectedTrack0Step2: {
    name: 'STEP3',
    status: 'COMPLETED',
    completedAt: '2025-01-02',
    durationMinutes: 120,
    durationText: '2시간',
  },
  unitDetailExpectedTrack1: {
    serialNo: 'S002',
  },
  unitDetailExpectedTrack1Step0: {
    name: 'STEPX',
    status: 'IN_PROGRESS',
    durationMinutes: 30,
    durationText: '30분',
  },
};

export const assemblyControllerFixtures = {
  realtimePath: '/api/monitoring/cp/assembly/realtime',
  dailyPath: '/api/monitoring/cp/assembly/daily',
  method: 'GET',
  okStatusCode: 200,
  badRequestStatusCode: 400,
  badRequestCode: 'BAD_REQUEST',
  badRequestError: {
    code: 'BAD_REQUEST',
  },
  dailyValidationKey: 'date',
  realtimeResponse: createOverviewResponse(),
  realtimeMeta: {
    path: '/api/monitoring/cp/assembly/realtime',
    method: 'GET',
    statusCode: 200,
  },
  dailyMeta: {
    path: '/api/monitoring/cp/assembly/daily',
    method: 'GET',
    statusCode: 400,
  },
};
