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

export class RequestDemoDto {
  @ApiProperty({
    description: "Full name of the person requesting demo",
    example: "John Doe",
  })
  @IsNotEmpty({
    message: validationMessage(messageKey.field_required, {
      ":field": "full_name",
    }),
  })
  @IsString({
    message: validationMessage(messageKey.field_type_validation_error, {
      ":field": "full_name",
      ":type": "string",
    }),
  })
  full_name: string

  @ApiProperty({
    description: "Work email address",
    example: "john.doe@company.com",
  })
  @IsNotEmpty({
    message: validationMessage(messageKey.field_required, {
      ":field": "work_email",
    }),
  })
  @IsEmail(
    {},
    {
      message: validationMessage(messageKey.field_type_validation_error, {
        ":field": "work_email",
        ":type": "email",
      }),
    },
  )
  work_email: string

  @ApiProperty({
    description: "Company name",
    example: "Acme Corporation",
  })
  @IsNotEmpty({
    message: validationMessage(messageKey.field_required, {
      ":field": "company_name",
    }),
  })
  @IsString({
    message: validationMessage(messageKey.field_type_validation_error, {
      ":field": "company_name",
      ":type": "string",
    }),
  })
  company_name: string

  @ApiProperty({
    description: "Phone number (optional)",
    example: "+1234567890",
    required: false,
  })
  @IsOptional()
  phone_number?: string

  @ApiProperty({
    description: "Message or requirements (optional)",
    example:
      "We are interested in learning more about your HR management features.",
    required: false,
  })
  @IsOptional()
  @IsString({
    message: validationMessage(messageKey.field_type_validation_error, {
      ":field": "message",
      ":type": "string",
    }),
  })
  message?: string

  @ApiProperty({
    description: "Plan type selection (optional)",
    example: "gold_monthly",
    required: false,
    enum: [
      "gold_monthly",
      "gold_yearly",
      "free_monthly",
      "free_yearly",
      "platinum_monthly",
      "platinum_yearly",
    ],
  })
  @IsOptional()
  @IsString({
    message: validationMessage(messageKey.field_type_validation_error, {
      ":field": "plan_type",
      ":type": "string",
    }),
  })
  @IsIn(
    [
      "gold_monthly",
      "gold_yearly",
      "free_monthly",
      "free_yearly",
      "platinum_monthly",
      "platinum_yearly",
    ],
    {
      message: validationMessage(messageKey.field_type_validation_error, {
        ":field": "plan_type",
        ":type": "valid plan type",
      }),
    },
  )
  plan_type?: string
}
