import { prop, getModelForClass } from "@typegoose/typegoose";

/* TODO
 * Comments
 * Further attributes for class
 * */

export interface SharedMemberAttributes {
  discordID: string | undefined;
}

export type MemberAdditionalAcknowledgement =
  | "Chair of the Board of Governors"
  | "Vice Chair of the Board of Governors"
  | "Voting Seat Member of the Board of Governors"
  | string;

export const MemberGuildRoleIDMap = {
  // Chair/Vice Chair of the Board of Governors
  CHAIR_OR_VICE_OF_BOARD: "608394038466445320",
  // Management
  MANAGEMENT: "1077646568091570236",
  // Director of Operations
  DIRECTOR_OF_OPERATIONS: "1077647072163020840",
  // Director of Engineering
  DIRECTOR_OF_ENGINEERING: "1077646956890951690",
  // Board of Governors
  BOARD_OF_GOVERNORS: "662163685439045632",
  // Project Manager
  PROJECT_MANAGER: "1077647157928132711",
  // Services Manager
  SERVICES_MANAGER: "1077647467056742482",
  // Staff
  STAFF: "446104438969466890",
  // Technician
  TECHNICIAN: "701454780828221450",
  // Moderator
  MODERATOR: "455972169449734144",
  // Core Team
  CORE_TEAM: "453689940140883988",
  // Intern (Training)
  INTERN: "701481967149121627",
};

// enum for the used programming languages in whois information
export enum MemberUsedLanguages {
  ASM = "lang-asm",
  CFAM = "lang-cfam",
  CSHARP = "lang-csharp",
  GO = "lang-go",
  JAVA = "lang-java",
  JS = "lang-js",
  KT = "lang-kt",
  PY = "lang-py",
  RB = "lang-rb",
  RS = "lang-rs",
  SWIFT = "lang-swift",
  TS = "lang-ts",
}

// enum for the used operating systems in the whois information
export enum MemberUsedOperatingSystems {
  ARCH = "os-arch",
  DEB = "os-deb",
  CENT = "os-cent",
  FEDORA = "os-fedora",
  MDARWIN = "os-mdarwin",
  MANJARO = "os-manjaro",
  REDHAT = "os-redhat",
  UBUNTU = "os-ubuntu",
  WIN = "os-win",
}
export default class Member implements SharedMemberAttributes {
  @prop({ required: true, unique: true })
  public discordID: string | undefined;

  @prop()
  public usedOperatingSystems: MemberUsedOperatingSystems[] | undefined;

  @prop()
  public usedLanguages: MemberUsedLanguages[] | undefined;

  @prop()
  public additionalAcknowledgement: MemberAdditionalAcknowledgement[] | undefined;
}

export const MemberModel = getModelForClass(Member);