import { IsString, IsEnum, IsOptional, IsNumber } from 'class-validator';
import { Type } from 'class-transformer';

export enum EventType {
  CHECK_IN = 'CHECK_IN',
  CHECK_OUT = 'CHECK_OUT',
}

export enum GeoStatus {
  VALID = 'VALID',
  OUT_OF_RANGE = 'OUT_OF_RANGE',
  LOW_ACCURACY = 'LOW_ACCURACY',
  PERMISSION_DENIED = 'PERMISSION_DENIED',
  UNAVAILABLE = 'UNAVAILABLE',
  TIMEOUT = 'TIMEOUT',
  SKIPPED = 'SKIPPED',
}

export class CheckinDto {
  @IsEnum(EventType)
  eventType!: EventType;

  @IsOptional()
  @IsNumber()
  @Type(() => Number)
  latitude?: number;

  @IsOptional()
  @IsNumber()
  @Type(() => Number)
  longitude?: number;

  @IsOptional()
  @IsNumber()
  @Type(() => Number)
  accuracy?: number;

  @IsEnum(GeoStatus)
  geoStatus!: GeoStatus;

  @IsOptional()
  @IsString()
  deviceId?: string;
}

export class GuestCheckinDto {
  @IsString()
  userId!: string;

  @IsEnum(EventType)
  eventType!: EventType;

  @IsOptional()
  @IsNumber()
  @Type(() => Number)
  latitude?: number;

  @IsOptional()
  @IsNumber()
  @Type(() => Number)
  longitude?: number;

  @IsOptional()
  @IsNumber()
  @Type(() => Number)
  accuracy?: number;

  @IsEnum(GeoStatus)
  geoStatus!: GeoStatus;

  @IsOptional()
  @IsString()
  deviceId?: string;
}
