import {
  IsString,
  IsOptional,
  IsNumber,
  IsDateString,
  IsBoolean,
  IsArray,
  ValidateNested,
} from 'class-validator';
import { Type } from 'class-transformer';

export class CreateTaxInvoiceItemDto {
  @IsOptional()
  @IsNumber()
  month?: number;

  @IsOptional()
  @IsNumber()
  day?: number;

  @IsOptional()
  @IsString()
  itemName?: string;

  @IsOptional()
  @IsString()
  specification?: string;

  @IsOptional()
  @IsNumber()
  quantity?: number;

  @IsNumber()
  unitPrice: number;

  @IsNumber()
  supplyAmount: number;

  @IsOptional()
  @IsNumber()
  taxAmount?: number;

  @IsOptional()
  @IsString()
  remark?: string;

  @IsOptional()
  @IsNumber()
  sortOrder?: number;
}

export class CreateTaxInvoiceDto {
  @IsOptional()
  @IsNumber()
  projectId?: number;

  @IsOptional()
  @IsNumber()
  clientId?: number;

  @IsOptional()
  @IsString()
  clientName?: string;

  @IsOptional()
  @IsString()
  projectName?: string;

  @IsDateString()
  issueDate: string;

  @IsNumber()
  supplyAmount: number;

  @IsNumber()
  taxAmount: number;

  @IsOptional()
  @IsString()
  supplierRegNo?: string;

  @IsOptional()
  @IsString()
  supplierName?: string;

  @IsOptional()
  @IsString()
  supplierRep?: string;

  @IsOptional()
  @IsString()
  supplierAddress?: string;

  @IsOptional()
  @IsString()
  supplierBizType?: string;

  @IsOptional()
  @IsString()
  supplierBizItem?: string;

  @IsOptional()
  @IsString()
  supplierContact?: string;

  @IsOptional()
  @IsString()
  supplierEmail?: string;

  @IsOptional()
  @IsString()
  recipientRegNo?: string;

  @IsOptional()
  @IsString()
  recipientName?: string;

  @IsOptional()
  @IsString()
  recipientRep?: string;

  @IsOptional()
  @IsString()
  recipientAddress?: string;

  @IsOptional()
  @IsString()
  recipientBizType?: string;

  @IsOptional()
  @IsString()
  recipientBizItem?: string;

  @IsOptional()
  @IsString()
  recipientContact?: string;

  @IsOptional()
  @IsString()
  recipientEmail?: string;

  @IsOptional()
  @IsNumber()
  paymentCash?: number;

  @IsOptional()
  @IsNumber()
  paymentCheck?: number;

  @IsOptional()
  @IsNumber()
  paymentNote?: number;

  @IsOptional()
  @IsNumber()
  paymentReceivable?: number;

  @IsOptional()
  @IsString()
  receiptType?: string;

  @IsOptional()
  @IsString()
  remark?: string;

  @IsOptional()
  @IsBoolean()
  isCorrection?: boolean;

  @IsOptional()
  @IsNumber()
  originalInvoiceId?: number;

  @IsArray()
  @ValidateNested({ each: true })
  @Type(() => CreateTaxInvoiceItemDto)
  items: CreateTaxInvoiceItemDto[];
}
