<!--
Allgemeine Notentabelle für Berufskollegs, die z.B. die etwas langtextigen
Lernfeldfächer unterstützt oder verschiedene Abschlussnoten.

Folgende Attribute werden unterstützt:
lernfeld: Sorgt dafür, dass die Klasse `fach-bezeichnung` nicht gesetzt wird und
          Fächer dementsprechend nicht eingerückt werden (nur Lernfeldfächer)
          true|false Standardwert false
noten:    Hier können Abschnittsnoten oder Abschlussnoten gesetzt werden, z.B.
          hj.noten oder s.bk_abschluss_faecher oder s.fhr_abschluss_faecher
          Muss gesetzt werden
fachGliederungen: sollten mitgegeben werden, wenn die für verschiedene Bildungsgänge
          geänderten Werte berücksichtigt werden sollen, z.B. andere Bezeichnungen
          in den verschiedenen Bildungsgängen
ger:      Wenn ein Referenzniveau für die Fremdsprachen angegeben werden soll
          true|false, Standardwert false,
fachklasse: muss mitgegeben werden, wenn aus der Fachklassen.json Datei der Standard-
          Wert gelesen werden soll. Ansonsten über Lernentw festlegen, was eigetragen wird
-->

<table class="table-noten">
  {#each faechergruppen as [gruppen_id, gruppenFaecher]}
    <tr>
      <td class="fachgruppe-margin">
        <b>{gruppenbezeichnung(gruppen_id)}</b>
      </td>
    </tr>
    {#each lernbereicheUndFaecher(gruppenFaecher) as [lernbereich, faecher]}
      {#if lernbereich != faecher[0].fach.Zeugnisbez}
        <tr><td colspan="2" class="{lernfeld ? '' : 'fach-bezeichnung'}">{lernbereich}</td></tr>
      {/if}
      {#each faecher as f (f.ID)}
        {#if f.AufZeugnis === '+'}
          <tr>
            <td class="{lernfeld ? '' : 'fach-bezeichnung'} {lernbereich != faecher[0].fach.Zeugnisbez ? 'lernfeld-lernbereich' : ''}">
              {#if f.fach.Zeugnisbez.includes("Projekt")}
                {f.Lernentw}
              {:else}
                <!-- Die Zeugnisbezeichnung hat bei gesetzten fachGliederungen einen anderen Namen... -->
                {f.fach.ZeugnisBez || f.fach.Zeugnisbez}
                <!-- Ist ger gesetzt, unter Lernentw nach Eintrag schauen. Wenn dort nichts steht,
                in der Fachklassen.json nach Einträgen für Fremdsprache und Fach_ID suchen
                Mit der Fussnote 1 muss natürlich auch tatsächlich eine Fussnote zum GER existieren … -->
                {#if ger && f.fach.IstSprache === '+'}
                  {fremdsprache(f, fachklasse)}<sup>1</sup>
                {/if}
              {/if}
            </td>
            <!-- Entweder Abschlussnote, wenn gesetzt oder Abschnittsnote oder nix -->
            <td class="td-fach-note"><span>{note(f.NoteAbschluss) || note(f.NotenKrz) || '–––––'}</span></td>
          </tr>
        {/if}
      {/each}
    {/each}
    <tr>
    </tr>
  {/each}
</table>

<script>
  import { gruppenIds } from './gruppenIDs'
  import { note, fremdsprache } from '../helfer'
  const _ = R.lodash

  export default {
    helpers: {
      _, note, fremdsprache,
      gruppenbezeichnung: gruppe => gruppenIds[gruppe],
      lernbereicheUndFaecher: gruppenFaecher => Object.entries(_.groupBy(gruppenFaecher, f => f.fach.Bezeichnung)),
    },
    computed: {
      faechergruppen: ({ noten, fachGliederungen }) => {
        // noten werden im jeweiligen Dokument über das *noten*-Attribut mitgegeben.
        // z.B. die Abschnittsnote oder die Noten aus *s.bk_abschluss_faecher* und co.
        // Nutzer über Konsole auf Änderungen in den Fächern hinweisen
        if (fachGliederungen && fachGliederungen.length > 0) console.log('Es wurden Fachgliederungswerte gesetzt: ', fachGliederungen)
        // suche in den fachGliederungen, ob für die jeweilige Fachklasse was besonderes festgelegt wurde
        // vorausgesetzt, fachGliederungen wurde mitgegeben
        const faecher = fachGliederungen
          ? noten.map(f => {return {...f, fach: Object.assign(f.fach, fachGliederungen.find(fg => fg.Fach_ID === f.Fach_ID))}})
          : noten
        // erstmal alle Fächer sortieren in der passenden Reihenfolge,
        // dann nach Fachgruppe gruppieren
        return Object.entries(_.groupBy(_.sortBy(faecher, f => f.fach.SortierungS2), f => f.fach.Fachgruppe_ID))
      },
      // Berufsbezogen kommt neuerdings zuerst, dann berufsübergreifend
      // wenn aber nur eine Note vermerkt ist, dann normal zurück
      faechergruppenUmsortiert: ({ faechergruppen }) => faechergruppen.length > 1
        ? [faechergruppen[0], faechergruppen[1]] = [faechergruppen[1], faechergruppen[0]]
        : faechergruppen
    }
  }
</script>
<style>
.table-noten {
  width: 100%;
  border: none;
  border-collapse: collapse;
  margin-bottom: 1rem;
}
.fach-bezeichnung {
  padding-left: 10mm;
}
.td-fach-note {
  padding-bottom: .2rem;
  padding-top: .2rem;
  width: 12rem;
}
.td-fach-note span {
  background-color: #dcdcdc !important;
  text-align: center;
  width: 10rem;
  display: block;
  margin: 0 auto;
}
/*.td-fach-note span.e-note {
  background-color: white !important;
  width: 17rem;
  margin: 0;
}*/

.fachgruppe-margin {
  padding-top: 0.3rem;
}

.lernfeld-lernbereich {
  padding-left: 2rem;
  padding-bottom: 0;
}

.lernbereich {
  padding-left: 20mm;
}
</style>