import { ApiProperty } from "@nestjs/swagger"
import {
  IsNotEmpty,
  IsOptional,
  IsInt,
  IsString,
  IsDateString,
} from "class-validator"
import { validationMessage } from "../../../utils/helpers"
import { messageKey } from "../../../constants/message-keys"

export class CreateTimeTrackingDto {
  @ApiProperty({
    description: "Project ID",
    example: 1,
  })
  @IsNotEmpty({
    message: validationMessage(messageKey.field_required, {
      ":field": "project_id",
    }),
  })
  @IsInt({
    message: validationMessage(messageKey.field_type_validation_error, {
      ":field": "project_id",
      ":type": "integer",
    }),
  })
  project_id: number

  @ApiProperty({
    description: "Activity Type ID",
    example: 1,
  })
  @IsNotEmpty({
    message: validationMessage(messageKey.field_required, {
      ":field": "activity_type_id",
    }),
  })
  @IsInt({
    message: validationMessage(messageKey.field_type_validation_error, {
      ":field": "activity_type_id",
      ":type": "integer",
    }),
  })
  activity_type_id: number

  @ApiProperty({
    description: "Description of the activity",
    example: "Working on user authentication module",
    required: false,
  })
  @IsOptional()
  @IsString({
    message: validationMessage(messageKey.field_type_validation_error, {
      ":field": "description",
      ":type": "string",
    }),
  })
  description?: string

  @ApiProperty({
    description: "Start time of the activity",
    example: "2024-01-15T09:00:00Z",
  })
  @IsNotEmpty({
    message: validationMessage(messageKey.field_required, {
      ":field": "start_time",
    }),
  })
  @IsDateString(
    {},
    {
      message: validationMessage(messageKey.field_type_validation_error, {
        ":field": "start_time",
        ":type": "datetime",
      }),
    },
  )
  start_time: string

  @ApiProperty({
    description: "End time of the activity (optional for ongoing activities)",
    example: "2024-01-15T17:00:00Z",
    required: false,
  })
  @IsOptional()
  @IsDateString(
    {},
    {
      message: validationMessage(messageKey.field_type_validation_error, {
        ":field": "end_time",
        ":type": "datetime",
      }),
    },
  )
  end_time?: string

  @ApiProperty({
    description: "Latitude coordinate",
    example: "40.7128",
    required: false,
  })
  @IsOptional()
  latitude?: number

  @ApiProperty({
    description: "Longitude coordinate",
    example: "-74.0060",
    required: false,
  })
  @IsOptional()
  longitude?: number

  @ApiProperty({
    description: "Address",
    example: "123 Main Street, City, State, ZIP",
    required: false,
  })
  @IsOptional()
  address?: string
}
