// Types definition for ANL Lab website content
export type Degree = "Professor" | "PhD" | "PhDCandidate" | "PhDStudent" | "MSCandidate" | "MSStudent";

export interface Member {
  ko: string;
  en: string;
  degree: Degree;
  affiliation?: string;
}

export interface Alumnus {
  ko: string;
  en: string;
  degree: "PhD" | "MS";
  graduatedAt: string; // ISO 8601 YYYY-MM
  major?: string;
  currentPosition?: string;
}

export type PubCategory =
  | "intl-journal-conf"
  | "domestic-journal-conf"
  | "patent";

export interface Publication {
  category: PubCategory;
  title: string;
  authors?: string; // Optional, set to undefined for papers without authors
  venue?: string;
  volume?: string;
  publishedAt: string; // ISO 8601 YYYY-MM or YYYY-MM-DD
  kci?: boolean;
  doi?: string;
  isHighlight?: boolean;
}

export interface Patent {
  category: "patent";
  title: string;
  inventors: string;
  applicationNo: string;
  applicationAt: string;
  registrationNo?: string;
  registrationAt?: string;
  country: string;
  publishedAt: string;
}

export interface Course {
  code: string;
  en: string;
  note?: string;
}

export interface Semester {
  term: "Spring" | "Fall";
  year: number;
  courses: Course[];
}

export type DocStatus = "IS" | "TS" | "TR" | "CDV" | "WDTR" | "InProgress";

export interface StandardDoc {
  title: string;
  ref: string;
  status: DocStatus;
  publishedAt?: string;
}

export interface StandardProject {
  wg: string;
  name: string;
  documents: StandardDoc[];
}

export interface StandardsBody {
  org: string;
  full: string;
  scope: "international" | "domestic";
  period: string;
  role?: string;
  projects: StandardProject[];
}

export interface ProjectDeliverable {
  title: string;
  ref: string;
  status: DocStatus;
}

export interface ResearchProject {
  slug: string;
  title: string;
  abstract: string;
  keywords: string[];
  standardsTrack?: string;
  standardsOrg?: string;
  period?: string;
  deliverables: ProjectDeliverable[];
  funder?: string;
}
