interface TokenData {
  exp: number;
  iat: number;
  auth_time: number;
  jti: string;
  iss: string;
  aud: string[];
  sub: string;
  typ: string;
  azp: string;
  nonce: string;
  session_state: string;
  acr: string;
  "allowed-origins": string[];
  realm_access: Realmaccess;
  resource_access: Resourceaccess;
  scope: string;
  sid: string;
  email_verified: boolean;
  name: string;
  preferred_username: string;
  given_name: string;
  family_name: string;
  email: string;
}

interface Resourceaccess {
  journal: Realmaccess;
}

interface Realmaccess {
  roles: (string | "teacher")[];
}

export interface UserData extends TokenData {
  sub: string;
  gravatar: string;
  email_verified: boolean;
  attributes: Record<string, string[]>;
  name: string;
  preferred_username: string;
  given_name: string;
  family_name: string;
  email: string;
}

export type BaseResponse<Data> = {
  success: boolean;
  body: Data;
};

export interface Lesson {
  _id: string;
  name: string;
  students: User[];
  date: string;
  created: string;
}

export interface AccessCode {
  expires: string;
  lesson: Lesson;
  _id: string;
  created: string;
}

export interface User {
  sub: string;
  email_verified: boolean;
  gravatar: string;
  name: string;
  groups: string[];
  preferred_username: string;
  given_name: string;
  family_name: string;
  email: string;
  picture?: string;
}

export interface Course {
  _id: string;
  name: string;
  teachers: User[];
  lessons: Lesson[];
  creator: User;
  startDt: string;
  created: string;
}
