import { IsNotEmpty, IsIn, MaxLength, Matches, IsNumber, IsDecimal, IsEnum, Min, Max, IsDateString } from 'class-validator';
import { validationMessages } from '../../../messages/validation-messages';
import { ApiProperty } from '@nestjs/swagger';
import { FAQFor } from 'src/entities/faqs.entity';
import { JobPrivacy, ProfilePrivacy } from 'src/entities/campaign.entity';

export class CampaignCreateDto {
  @ApiProperty({ example: 'Campaign 1', required: true })
  @IsNotEmpty({ message: validationMessages.campaign.campaign_name_required })
  @MaxLength(250, { message: validationMessages.common.max_length })
  campaign_name: string;

  @ApiProperty({ example: 100.0, required: true })
  @IsNotEmpty({ message: validationMessages.campaign.budget_per_influencer_required })
  @Min(0, { message: validationMessages.campaign.budget_per_influencer_min })
  @Max(99999.99, { message: validationMessages.campaign.budget_per_influencer_max })
  budget_per_influencer: number;

  @ApiProperty({ example: 5, required: true })
  @IsNotEmpty({ message: validationMessages.campaign.number_of_influencers_required })
  @Min(0, { message: validationMessages.campaign.number_of_influencers_min })
  @Max(1000, { message: validationMessages.campaign.number_of_influencers_max })
  number_of_influencers: number;

  content_type: string;

  @ApiProperty({ example: '[micro,macro]', required: true })
  @IsNotEmpty({ message: validationMessages.campaign.influencer_type_required })
  influencer_type: string[];

  @ApiProperty({ example: 'Job Requirement 1', required: true })
  @IsNotEmpty({ message: validationMessages.campaign.job_requirement_required })
  job_requirement: string;

  @ApiProperty({ example: '2024-10-01', required: true })
  @IsDateString({}, { message: validationMessages.campaign.posting_start_date_invalid })
  @IsNotEmpty({ message: validationMessages.campaign.posting_start_date_required })
  posting_start_date: Date;

  @ApiProperty({ example: '2024-10-10', required: true })
  @IsDateString({}, { message: validationMessages.campaign.posting_end_date_invalid })
  @IsNotEmpty({ message: validationMessages.campaign.posting_end_date_required })
  posting_end_date: Date;

  @ApiProperty({ example: '2024-10-05', required: true })
  @IsDateString({}, { message: validationMessages.campaign.first_draft_estimated_date_invalid })
  @IsNotEmpty({ message: validationMessages.campaign.first_draft_estimated_date_required })
  first_draft_date: Date;

  @ApiProperty({ example: 'Public', required: true })
  @IsEnum(ProfilePrivacy, { message: validationMessages.campaign.profile_privacy_required })
  @IsNotEmpty({ message: validationMessages.campaign.profile_privacy_required })
  profile_privacy: string;

  @ApiProperty({ example: 'Campaign Requirements...', required: false })
  campaign_requirements?: string;

  @ApiProperty({ example: 'attachment.jpg', required: false })
  attachment?: string;

  currency: string;

  @ApiProperty({ example: 'In-Person', required: false })
  @IsEnum(JobPrivacy)
  job_privacy: string;

  @ApiProperty({ example: '[instagram,facebook]', required: false })
  platforms?: string[];

  @ApiProperty({ example: '[UUID,UUID]', required: false })
  categories?: string[];

  is_barter?: string;
  product_value?: number;

  is_open_to_international_influencer?: boolean;
  is_only_international_influencer?: boolean;

}
