import type {
  AssemblyMonitoringDailyQueryDto,
  AssemblyMonitoringProcessesQueryDto,
  AssemblyMonitoringQueryWithFactUnit,
  AssemblyMonitoringRealtimeQueryDto,
  AssemblyMonitoringUnitDetailQueryDto,
  AssemblyMonitoringUnitDetailQueryWithDefaults,
  AssemblyMonitoringUnitListQueryDto,
  AssemblyMonitoringUnitListQueryWithDefaults,
} from 'src/api/monitoring/cp/assembly/dto/request';

const formatTodayDate = (): string => {
  const today = new Date();
  const year = String(today.getFullYear());
  const month = String(today.getMonth() + 1).padStart(2, '0');
  const day = String(today.getDate()).padStart(2, '0');
  return `${year}-${month}-${day}`;
};

export const assemblyQueryFixtures = {
  realtimeQuery: {} as AssemblyMonitoringRealtimeQueryDto,
  realtimeExpectedQuery: {
    factUnit: 2,
  } as AssemblyMonitoringQueryWithFactUnit<AssemblyMonitoringRealtimeQueryDto>,
  dailyQuery: {
    date: '2026-01-15',
  } as AssemblyMonitoringDailyQueryDto,
  dailyExpectedQuery: {
    date: '2026-01-15',
    factUnit: 2,
  } as AssemblyMonitoringQueryWithFactUnit<AssemblyMonitoringDailyQueryDto>,
  processesQuery: {} as AssemblyMonitoringProcessesQueryDto,
  processesExpectedQuery: {
    factUnit: 2,
  } as AssemblyMonitoringQueryWithFactUnit<AssemblyMonitoringProcessesQueryDto>,
  unitListQuery: {} as AssemblyMonitoringUnitListQueryDto,
  unitListNow: new Date(2026, 0, 15, 12, 0),
  unitListExpectedQuery: {
    factUnit: 2,
    prodPlanMonth: '202601',
    modelSeq: 0,
    serialNo: '',
  } as AssemblyMonitoringUnitListQueryWithDefaults,
  unitDetailQuery: {
    modelSeq: 1,
    prodPlanSeq: 2,
    serialNo: 'S1',
  } as AssemblyMonitoringUnitDetailQueryDto,
  unitDetailExpectedQuery: {
    modelSeq: 1,
    prodPlanSeq: 2,
    serialNo: 'S1',
    factUnit: 2,
    specSeq: 0,
    workingEndDate: '',
  } as AssemblyMonitoringUnitDetailQueryWithDefaults,
  unitDetailMultiTrackQuery: {
    modelSeq: 10,
    prodPlanSeq: 1,
    serialNo: 'S001',
  } as AssemblyMonitoringUnitDetailQueryDto,
  createDailyQuery:
    (): AssemblyMonitoringQueryWithFactUnit<AssemblyMonitoringDailyQueryDto> => ({
      factUnit: 2,
      date: formatTodayDate(),
    }),
};
