import Joi from 'joi';

const STATUSES = ['draft', 'submitted', 'approved'] as const;

export interface CreateWbsBody {
  projectId: number;
  parentId?: number;
  code: string;
  name: string;
  description?: string;
  discipline?: string;
  location?: string;
  responsibleTeam?: string;
  status?: string;
}

export interface UpdateWbsBody {
  parentId?: number | null;
  code?: string;
  name?: string;
  description?: string;
  discipline?: string;
  location?: string;
  responsibleTeam?: string;
  status?: string;
}

export const createWbsSchema = Joi.object<CreateWbsBody>({
  projectId: Joi.number().integer().positive().required(),
  parentId: Joi.number().integer().positive().optional(),
  code: Joi.string().trim().min(1).max(30).required(),
  name: Joi.string().trim().min(1).max(150).required(),
  description: Joi.string().trim().max(1000).allow('').optional(),
  discipline: Joi.string().trim().max(50).allow('').optional(),
  location: Joi.string().trim().max(100).allow('').optional(),
  responsibleTeam: Joi.string().trim().max(100).allow('').optional(),
  status: Joi.string().valid(...STATUSES).optional(),
}).required();

export const updateWbsSchema = Joi.object<UpdateWbsBody>({
  // null clears the parent, making this node a root again.
  parentId: Joi.number().integer().positive().allow(null),
  code: Joi.string().trim().min(1).max(30),
  name: Joi.string().trim().min(1).max(150),
  description: Joi.string().trim().max(1000).allow(''),
  discipline: Joi.string().trim().max(50).allow(''),
  location: Joi.string().trim().max(100).allow(''),
  responsibleTeam: Joi.string().trim().max(100).allow(''),
  status: Joi.string().valid(...STATUSES),
}).min(1).required();
