import Joi from 'joi';

export const STATUSES = ['draft', 'submitted', 'active'] as const;
export type ProjectStatus = (typeof STATUSES)[number];

export interface CreateProjectBody {
  name: string;
  code?: string;
  type?: string;
  location?: string;
  client?: string;
  status?: ProjectStatus;
  description?: string;
  startDate?: string;
  targetCompletionDate?: string;
  projectManagerId?: number;
  planningEngineerId?: number;
  towers?: string[];
  floors?: string[];
}

export type UpdateProjectBody = Partial<CreateProjectBody>;

const tagList = Joi.array().items(Joi.string().trim().min(1).max(50)).max(50);

const fields = {
  name: Joi.string().trim().min(1).max(150),
  code: Joi.string().trim().min(1).max(30),
  type: Joi.string().trim().max(60),
  location: Joi.string().trim().max(150),
  client: Joi.string().trim().max(150),
  status: Joi.string().valid(...STATUSES),
  description: Joi.string().trim().max(255).allow(''),
  startDate: Joi.date().iso(),
  targetCompletionDate: Joi.date().iso(),
  projectManagerId: Joi.number().integer().positive(),
  planningEngineerId: Joi.number().integer().positive(),
  towers: tagList,
  floors: tagList,
};

export const createProjectSchema = Joi.object<CreateProjectBody>({
  ...fields,
  name: fields.name.required(),
}).required();

export const updateProjectSchema = Joi.object<UpdateProjectBody>(fields).min(1).required();

export interface AddTeamMemberBody {
  userId: number;
  roleOnProject: string;
  department?: string;
}

export const addTeamMemberSchema = Joi.object<AddTeamMemberBody>({
  userId: Joi.number().integer().positive().required(),
  roleOnProject: Joi.string().trim().min(1).max(60).required(),
  department: Joi.string().trim().max(60).optional(),
}).required();
