import {
  IsNotEmpty,
  IsString,
  IsDate,
  Length,
  IsInt,
  Min,
  Max,
  IsArray,
  IsJSON,
  IsDateString,
  IsNumber,
} from 'class-validator';
import { Timestamp } from 'typeorm';
import { ObjectivePointEntity } from './game.entity';

export class GameDTO {
  @IsString()
  @IsNotEmpty()
  @Length(3, 30)
  name: string;
  @IsNotEmpty()
  @Length(1, 255)
  desc: string;
  @IsNotEmpty()
  //@IsJSON()
  center: JSON;
  //@IsJSON()
  // doesn't accept with IsJSON, WIP to get validation for map and center
  // IsJSON checks with json.parse, expecting string
  map?: JSON;
  nodesettings?: JSON;
  @IsDateString()
  @IsNotEmpty()
  startdate: string;
  @IsDateString()
  @IsNotEmpty()
  enddate: string;
  // custom validation for array length (arr>min, arr<max)
  //@Validate(ArrayLength, [4, 8])
  factions?: FactionDTO[];
  objective_points?: FlagboxDTO[];
}

export class FactionDTO {
  @IsString()
  @IsNotEmpty()
  @Length(2, 15)
  factionName: string;
  factionPassword: string;
  multiplier: number;
  game: GameDTO;
}

export class FlagboxDTO {
  @IsString()
  @IsNotEmpty()
  @Length(7)
  objectivePointDescription: string;
  @IsNumber()
  objectivePointMultiplier: number;
}

export class FlagboxEventDTO {
  node_id: string;
  owner: number;
  action: number;
  capture: number;
  oP_HistoryTimestamp?: string
  objective_point?: ObjectivePointEntity
}

export class GameGroupDTO {
  @IsString()
  @Length(3, 31)
  name: string;
}