# Career schema — typed artifacts for skills, work history, talks, positioning, and publication.
# All types include `linked_nodes` referencing IDs from .ontology/core.ncl.
# This creates the DAG connection between career artifacts and the ontology.
#
# Output: .ontology/career.ncl exports to JSON → Nu script generates YAML for cv_repo.

# ── Skill ────────────────────────────────────────────────────────────────────

let proficiency_tier_type = [| 'Expert, 'Advanced, 'Intermediate, 'Foundational |] in

let skill_type = {
  id           | String,
  name         | String,
  tier         | proficiency_tier_type,
  proficiency  | Number,
  years        | Number        | default = 0,
  linked_nodes | Array String  | default = [],
  evidence     | Array String  | default = [],
  note         | String        | default = "",
} in

# ── Work Experience ───────────────────────────────────────────────────────────

let work_experience_type = {
  id           | String,
  company      | String,
  company_url  | String        | default = "",
  position     | String,
  date_start   | String,
  date_end     | String        | default = "present",
  location     | String        | default = "",
  description  | String        | default = "",
  achievements | Array String  | default = [],
  tools        | Array String  | default = [],
  linked_nodes | Array String  | default = [],
} in

# ── Talk / Activity ───────────────────────────────────────────────────────────

let talk_status_type = [| 'Idea, 'Proposed, 'Accepted, 'Delivered, 'Archived |] in

let talk_type = {
  id           | String,
  title        | String,
  event        | String,
  date         | String        | default = "",
  location     | String        | default = "",
  description  | String        | default = "",
  slides_url   | String        | default = "",
  video_url    | String        | default = "",
  repository   | String        | default = "",
  status       | talk_status_type,
  linked_nodes | Array String  | default = [],
} in

# ── Positioning Strategy ──────────────────────────────────────────────────────

let positioning_type = {
  id           | String,
  name         | String,
  core_message | String,
  target       | String,
  linked_nodes | Array String  | default = [],
  note         | String        | default = "",
} in

# ── Company Target ─────────────────────────────────────────────────────────────

let company_status_type = [| 'Active, 'Watching, 'Inactive, 'Applied, 'Closed |] in

let company_target_type = {
  id           | String,
  name         | String,
  url          | String        | default = "",
  status       | company_status_type,
  fit_signals  | Array String  | default = [],
  linked_nodes | Array String  | default = [],
  note         | String        | default = "",
} in

# ── Publication Card ──────────────────────────────────────────────────────────
# Project cards for blog grid, CV, and proposals.
# project_node references a node ID in .ontology/core.ncl.

let project_pub_status_type = [| 'Active, 'Beta, 'Maintenance, 'Archived, 'Stealth |] in

# Career overlay for a project card.
# project_node references the canonical card in the portfolio repo.
# Only career-specific fields live here — display metadata lives in portfolio/projects/{id}/card.ncl.
let publication_card_type = {
  project_node  | String,
  featured      | Bool   | default = false,
  sort_order    | Number | default = 0,
  # Optional overrides — when career context needs a different tagline than the portfolio card
  tagline_override | String | default = "",
} in

# ── Root export ───────────────────────────────────────────────────────────────

{
  ProficiencyTier  = proficiency_tier_type,
  TalkStatus       = talk_status_type,
  CompanyStatus    = company_status_type,
  ProjectPubStatus = project_pub_status_type,

  Skill            = skill_type,
  WorkExperience   = work_experience_type,
  Talk             = talk_type,
  Positioning      = positioning_type,
  CompanyTarget    = company_target_type,
  PublicationCard  = publication_card_type,

  CareerConfig = {
    skills        | Array skill_type            | default = [],
    experiences   | Array work_experience_type  | default = [],
    talks         | Array talk_type             | default = [],
    positioning   | Array positioning_type      | default = [],
    companies     | Array company_target_type   | default = [],
    publications  | Array publication_card_type | default = [],
  },
}
