# fields in curricular description
# leaning on methods in OpenAPI 3.0 

#
# Modulname
#
name:
    type: str
    translatable: false
    label: {
        de: "Modulname",
        en: "name of course"
    }

#
# Kürzel / ID
#
id: 
    type: str
    translatable: false
    label: {
        de: "Kürzel",
        en: "code"
    }

#
# Modulverantwortliche:r
#
instructor: 
    type: str
    translatable: false
    label: {
        de: "Modulverantwortliche:r",
        en: "module instructor"
    }

#
# Qualifikationsziele
#
goal:
    type: str
    label: {
        de: "Qualifikationsziele",
        en: "educational goal"
    }

#
# Modulinhalte
#
content: 
    type: str
    label: {
        de: "Modulinhalte",
        en: "content"
    }

#
# Lehrform
#
form-of-instruction: 
    label: {
        de: "Lehrform(en)",
        en: "form of instruction"
    }
    type: multikey 
    keys: {
        'lecture' : {
            de: "Vorlesung",
            en: "lecture"
        },
        'lecture_seminar' : {
            de: "Seminaristische Vorlesung",
            en: "lecture and seminar"
        },
        'seminar' : {
            de: "Seminar",
            en: "seminar"
        },
        'exersise' : {
            de: "Übung",
            en: "lab exersise"
        },
        'pc_lab' : {
            de: "Rechnergestütztes Praktikum",
            en: "PC exersise"
        },
        'project' : {
            de: "Project",
            en: "project"
        }
    }
    template: 
        de: "${key} (${value}SWS)"
        en: "${key} (${value}SWS)"

#
# Voraussetzungen für die Teilnahme
#
prerequisites: 
    type: str
    label: {
        de: "Voraussetzungen für die Teilnahme",
        en: "prerequisites"
    }

#
# Literatur und multimediale Lehr- und Lernprogramme
#
media-of-instruction:     
    type: str
    label: {
        de: "Literatur und multimediale Lehr- und Lernprogramme",
        en: "media of instruction"
    }

#
# Lehrbriefautor
#
author-of-indenture: 
    type: str
    label: {
        de: "Lehrbriefautor",
        en: "author of indenture"
    }

#
# Verwendung in (Studienprogramm)
#
used-in:
    type: str
    label: {
        de: "Verwendung",
        en: "used in study programs"
    }

#
# Arbeitsaufwand
#
workload:
    type: str
    label: {
        de: "Arbeitsaufwand / Gesamtworkload",
        en: "workload"
    }
#
# credits/ECTS
#
credits: 
    label: { 
        en: "credits and weight of mark",
        de: "Kreditpunkte und Gewichtung der Note in der Gesamtnote"
    }
    type: int
    template: 
        de: "${value}CP Gewichtung: ${value}CP von 120CP "
        en: "${value}CP weight: ${value} / 120 "    
    

#
# Leistungsnachweis
#
form-of-exam: 
    label: {
        de: "Leistungsnachweis",
        en: "form of examination"
    }
    type: enum 
    values: {
        'written' : {
            de: "Schriftliche Prüfung",
            en: "written exam"
        },
        'oral' : { 
            de: "Mündliche Prüfung",
            en: "oral exam"
        },
        'alternative' : {
            de: "Alternative Prüfungunsleistung",
            en: "alternative examination"
        }
    }

#
# Semester
#
term: 
    label: {
        de: "Semester",
        en: "Term"
    }
    type: int
    template: 
        de: "$value$. Semester"
        en: "$value$ semester"

#
# Häufigkeit des Angebots
#
frequency: 
    label: {
        de: "Häufigkeit des Angebots",
        en: "Frequency of Offer"
    }
    type: "enum"
    values: {
        'once_per_term' : {
            de: "jedes Semester",
            en: "every term"
        },
        'once_per_year' : {
            de: "einmal im Studienjahr",
            en: "once per study year"
        }
    }

duration: 
    type: int
    template: 
        de: "$value Semester"
        en: "$value term(s)"

kind:
    type: enum
    label: {
        de: 'Art der Veranstaltung (Pflicht, Wahl, etc.)',
        en: 'kind of module (compulsory, elective)'
    }
    values: {
        'compulsory': {
            de: "Pflicht",
            en: "compulsory"
        },
        'elective' : {
            de: "Wahl/Wahlpflicht",
            en: "elective"
        }
    }

remarks:     
    type: str
    label: {
        de: "Bemerkungen",
        en: "Remarks"
    }

# test:
#     label: { de: "Name", en: "A Test" }
#     type: enum
#     values: {
#         'brand' : { de: "Marke", en: "Brand"  },
#         'new' : { de: "Neu", en: "New" }
#     }


# # German
# de:
#   name: Modulname
#   id: Kürzel
#   instructor: Modulverantwortlicher
#   goal: Qualifikationsziele
#   content: Modulinhalte
#   form: Lehrformen
#   prerequisites: Voraussetzungen für die Teilnahme
#   media-of-instruction: Literatur/ multimediale Lehr- und Lernprogramme
#   author-of-indenture: Lehrbriefautor
#   used-in: Verwendbarkeit
#   workload: Arbeitsaufwand/ Gesamtworkload
#   credits: ECTS und Gewichtung der Note in der Gesamtnote
#   form-of-exam: Leistungsnachweis
#   term: Semester
#   frequency: Häufigkeit des Angebots
#   duration: Dauer
#   kind: Art der Veranstaltung (Pflicht, Wahl, etc.)
#   remarks: Bemerkungen

# # English
# en:
#   name: Coursename
#   id: Code
#   instructor: Instructor
#   goal: Goals of Qualification
#   content: Content and Topics
#   form: Form of Instruction 
#   prerequisites: Prerequisites
#   media-of-instruction: Media of Instruction
#   author-of-indenture: Author of Indenture
#   used-in: Viable for Course
#   workload: Workload
#   credits: Credits and Weight of Mark
#   form-of-exam: Form of Examination
#   term: Term
#   frequency: Frequency
#   duration: Duration
#   kind: Compulsory / Elective
#   remarks: Remarks

# # validators for enum-fields
# enums:
#   form:
#     - lecture
#     - seminar
#     - project
#   form-of-exam:
#     - written
#     - oral
#     - alternative
#   term: 
#     - summer
#     - winter
#     - both