import { ProgramUserAttendance } from 'src/common/entities';

export class AttendanceResponseDto {
  id: number;
  userId: number;
  registrationId: number;
  registrationSeqNumber: string;
  programId: number;
  sessionId: number | null;
  uuid: string | null;
  status: string;
  fullName: string;
  email: string;
  mobile: string;
  gender: string;
  dob: Date | null;
  city: string;
  countryName: string;
  registrationStatus: string;
  registrationDate: Date | null;
  programName: string;
  sessionName: string | null;
  sessionStart: Date | null;
  sessionEnd: Date | null;
  rmName: string;
  otherRmName: string | null;
  qrUrl: string;
  profileUrl: string;
  isAttended: boolean;
  isManuallyCheckedIn: boolean;
  checkedInAt: Date | null;
  checkedInByUserId: number | null;
  checkedInByName: string;
  createdAt: Date;
  updatedAt: Date;
  createdBy: number | null;
  updatedBy: number | null;

  static from(item: ProgramUserAttendance): AttendanceResponseDto {
    const dto = new AttendanceResponseDto();
    dto.id = item.id;
    dto.userId = item.userId;
    dto.registrationId = item.registrationId;
    dto.registrationSeqNumber = item.registrationSeqNumber ?? '';
    dto.programId = item.programId;
    dto.sessionId = item.sessionId ?? null;
    dto.uuid = item.uuid ?? null;
    dto.status = item.status ?? '';
    dto.fullName = item.registration?.fullName ?? item.fullName ?? '';
    dto.email = item.registration?.emailAddress ?? item.email ?? '';
    dto.mobile = item.registration?.mobileNumber ?? item.mobile ?? '';
    dto.gender = item.registration?.gender ?? '';
    dto.dob = item.registration?.dob ?? null;
    dto.city = item.registration?.city ?? '';
    dto.countryName = item.registration?.countryName ?? '';
    dto.registrationStatus = item.registration?.registrationStatus ?? item.status ?? '';
    dto.registrationDate = item.registration?.registrationDate ?? null;
    dto.programName = item.program?.name ?? '';
    dto.sessionName = item.session?.name ?? null;
    dto.sessionStart = item.session?.startsAt ?? null;
    dto.sessionEnd = item.session?.endsAt ?? null;
    dto.rmName = item.registration?.rmContactUser?.orgUsrName ?? item.rmName ?? '';
    dto.otherRmName = item.otherRmName ?? null;
    dto.qrUrl = item.qrUrl ?? '';
    dto.profileUrl = item.registration?.profileUrl ?? '';
    dto.isAttended = item.isAttended;
    dto.isManuallyCheckedIn = item.isManuallyCheckedIn;
    dto.checkedInAt = item.checkedInAt ?? null;
    dto.checkedInByUserId = item.checkedInByUserId ?? null;
    dto.checkedInByName = item.checkedInByUser?.orgUsrName ?? item.checkedInByUser?.fullName ?? '';
    dto.createdAt = item.createdAt;
    dto.updatedAt = item.updatedAt;
    dto.createdBy = item.createdBy ?? null;
    dto.updatedBy = item.updatedBy ?? null;
    return dto;
  }
}
