interface Skill { id: string; name: string; } export const calculateSkillsMatch = ( userSkills: Skill[], vacancySkills: Skill[], ): { percentage: number; matchedSkills: Skill[]; missingSkills: Skill[]; } => { if (vacancySkills.length === 0) { return { percentage: 0, matchedSkills: [], missingSkills: [], }; } // Create sets of skill IDs for efficient lookup const userSkillIds = new Set(userSkills.map((s) => s.id)); const _vacancySkillIds = new Set(vacancySkills.map((s) => s.id)); // Find matched and missing skills const matchedSkills = vacancySkills.filter((skill) => userSkillIds.has(skill.id), ); const missingSkills = vacancySkills.filter( (skill) => !userSkillIds.has(skill.id), ); // Calculate percentage const percentage = Math.round( (matchedSkills.length / vacancySkills.length) * 100, ); return { percentage, matchedSkills, missingSkills, }; };