import { ApiProperty } from '@nestjs/swagger';
import { Type } from 'class-transformer';
import { IsArray, IsDate, IsNotEmpty, IsNumber, IsOptional, IsString } from 'class-validator';

export class CreateJobDto {
	@IsString()
	@IsNotEmpty()
	@ApiProperty()
	title: string;

	@IsString()
	@IsNotEmpty()
	@ApiProperty()
	description: string;

	@IsString()
	@IsNotEmpty()
	@ApiProperty()
	status: string;

	@IsNumber()
	@IsNotEmpty()
	@ApiProperty()
	clientId: number;

	@IsString()
	@IsNotEmpty()
	@ApiProperty()
	poNumber: string;

	@Type(() => Date)
	@IsDate()
	@IsNotEmpty()
	@ApiProperty()
	invoiceDate: Date;

	@Type(() => Date)
	@IsDate()
	@IsOptional()
	@ApiProperty()
	productionDate: Date;

	@IsNumber()
	@IsOptional()
	@ApiProperty()
	productionPriority: number;

	@IsString()
	@IsOptional()
	@ApiProperty()
	productionNotes: string;

	@IsString()
	@IsOptional()
	@ApiProperty()
	shippingOption: string;

	@IsString()
	@IsNotEmpty()
	@ApiProperty()
	shippingName: string;

	@IsString()
	@IsNotEmpty()
	@ApiProperty()
	shippingAddress1: string;

	@IsString()
	@IsNotEmpty()
	@ApiProperty()
	shippingAddress2: string;

	@IsString()
	@IsNotEmpty()
	@ApiProperty()
	shippingCity: string;

	@IsString()
	@IsNotEmpty()
	@ApiProperty()
	shippingState: string;

	@IsString()
	@IsNotEmpty()
	@ApiProperty()
	shippingPostcode: string;

	@IsString()
	@IsOptional()
	@ApiProperty()
	shippingCountry: string;

	@IsString()
	@IsNotEmpty()
	@ApiProperty()
	shippingPhone: string;

	@IsString()
	@IsNotEmpty()
	@ApiProperty()
	shippingEmail: string;

	@IsString()
	@ApiProperty()
	shippingNotes: string;

	@IsNumber()
	@IsNotEmpty()
	@ApiProperty()
	createdById: number;

	@IsArray()
	@IsNotEmpty()
	@ApiProperty()
	contacts: [
		{
			id: number;
			email: string;
		},
	];

	@IsArray()
	@IsNotEmpty()
	@ApiProperty()
	fees: [
		{
			feeId: number;
			quantity: number;
			priceOverwrite: number;
		},
	];

	@IsString()
	@IsNotEmpty()
	@IsOptional()
	@ApiProperty()
	quoteKey: string;
}
