import { request } from '../lib/apiClient' import { toDate } from '../lib/format' /** Assessments — backend/assessments/app.py. Dual-key: exactly one of inbox_id / manual_upload_candidate_id. */ export const ASSESSMENT_TYPES = [ 'Coding Challenge', 'Take-home Project', 'Cognitive Test', 'Personality Assessment', 'SQL Test', 'Case Study', ] export const ASSESSMENT_STATUSES = ['pending', 'in_progress', 'completed', 'expired'] const STATUS_LABEL = { pending: 'Pending', in_progress: 'In Progress', completed: 'Completed', expired: 'Expired', } export function list({ assessmentId, inboxId, manualUploadCandidateId, jobPostId, assessmentStatus, top, skip } = {}) { return request('/assessments/fetch', { params: { assessment_id: assessmentId, inbox_id: inboxId, manual_upload_candidate_id: manualUploadCandidateId, job_post_id: jobPostId, assessment_status: assessmentStatus, top, skip, }, }) } export function counts() { return request('/assessments/counts') } export function create(body) { return request('/assessments/create', { method: 'POST', body }) } export function update(assessmentId, body) { return request('/assessments/update', { method: 'PATCH', params: { assessment_id: assessmentId }, body, }) } export function remove(assessmentId) { return request('/assessments/delete', { method: 'DELETE', params: { assessment_id: assessmentId }, }) } export function remind(assessmentId) { return request('/assessments/remind', { method: 'POST', params: { assessment_id: assessmentId }, }) } function durationLabel(minutes) { if (minutes == null) return null if (minutes >= 1440 && minutes % 1440 === 0) { const days = minutes / 1440 return days === 1 ? '1 day' : `${days} days` } return `${minutes} min` } export function toAssessmentView(row) { const name = row.candidate_name || 'Unknown' return { id: row.id, inboxId: row.inbox_id, manualUploadCandidateId: row.manual_upload_candidate_id, jobPostId: row.job_post_id, candidate: name, jobTitle: row.job_title || '—', type: row.assessment_type, status: STATUS_LABEL[row.assessment_status] ?? row.assessment_status, statusKey: row.assessment_status, score: row.score ?? null, sectionScores: Array.isArray(row.section_scores) ? row.section_scores : [], duration: durationLabel(row.duration_minutes) || '—', durationMinutes: row.duration_minutes, assigned: toDate(row.assigned_at), due: toDate(row.due_at), completedAt: toDate(row.completed_at), remindedAt: toDate(row.reminded_at), } }