<div class="columns">
  <div class="column">
  <b>Ergebnisse der Sprecherwahl:</b>
    <table class="table table-condensed table-striped">
      <th>Schüler</th><th>#</th>
      {#each wahlergebnis_schueler.filter(s=>s.gewaehlt_sprecher > 0).sort((a,b)=>a.gewaehlt_sprecher-b.gewaehlt_sprecher).reverse() as s}
        <tr>
          <td>{s.vorname} {s.nachname || ''} – {s.klasse} {s.email || ''}</td><td>{s.gewaehlt_sprecher}</td>
        </tr>
      {/each}
    </table>
  </div>
  <div class="column">
  <b>Ergebnisse der Schukowahl:</b>
    <table class="table table-condensed table-striped">
      <th>Schüler</th><th>#</th>
      {#each wahlergebnis_schueler.filter(s=>s.gewaehlt_schuko > 0).sort((a,b)=>a.gewaehlt_schuko-b.gewaehlt_schuko).reverse() as s}
        <tr>
          <td>{s.vorname} {s.nachname || ''} – {s.klasse} {s.email || ''}</td><td>{s.gewaehlt_schuko}</td>
        </tr>
      {/each}
    </table>
  </div>
  <div class="column">
  <b>Ergebnisse der SV-Lehrerwahl:</b>
    <table class="table table-condensed table-striped">
      <th>Lehrer</th><th>#</th>
      {#each wahlergebnis_lehrer.filter(l=>l.gewaehlt_lehrer > 0).sort((a,b)=>a.gewaehlt_lehrer-b.gewaehlt_lehrer).reverse() as l}
        <tr>
          <td>{l.name}</td><td>{l.gewaehlt_lehrer}</td>
        </tr>
      {/each}
    </table>
  </div>
</div>
<input type="checkbox" bind:checked={nur_aktive}> Nur aufgestellte Schüler anzeigen.
<div class="columns">
  <div class="column is-two-thirds">
    <table class="table is-striped">
      <thead>
        <tr>
          <th>Name</th>
          <th>Wahlstatus</th>
        </tr>
      </thead>
      <tbody>
          {#each lehrer as l}
            <tr>
              <td>{l.name}</td>
              <td class:has-background-success={l.waehlbar}>
                wählbar: <input checked={l.waehlbar} type="checkbox" on:click={()=>lehrer_waehlbar(l)}>
                {#if l.waehlbar}
                  <button class="button is-link tooltip is-tooltip-multiline" data-tooltip={l.info}
                  on:click="{()=>lehrer_edit=l}">Infotext</button>
                {/if}
                {#if l===lehrer_edit}
                  <textarea cols="80" rows="10" bind:value={l.info}></textarea><button on:click={lehrer_info}>Speichern</button>
                {/if}
              </td>
            </tr>
          {/each}
        </tbody>
      </table>
    {#each Object.entries(schueler) as [klasse, schuelers]}
      <h3 class="title">{klasse}</h3>
      <table class="table is-striped">
        <thead>
          <tr>
            <th>Name</th>
            <th>Vorname</th>
            <th>Wahlstatus</th>
          </tr>
        </thead>
        <tbody>
          {#each schuelers.filter(s=>(nur_aktive && (s.schuko || s.sprecher)) || (!nur_aktive && s)) as s}
            <tr>
              <td>{s.Name}</td>
              <td>{s.Vorname}</td>
              <td class:has-background-success={s.schuko||s.sprecher}>
                Schuko: <input checked={s.schuko} type="checkbox" on:click={()=>check_aktiv(s, 'schuko')}>
                Sprecher: <input checked={s.sprecher} type="checkbox" on:click={()=>check_aktiv(s, 'sprecher')}>
                gewählt: <input checked={s.gewaehlt} type="checkbox" on:click={()=>check_aktiv(s, 'gewaehlt')}>
                wählbar: <input checked={s.waehlbar} type="checkbox" on:click={()=>check_aktiv(s, 'waehlbar')}>
                {#if s.schuko || s.sprecher}
                  <button class="button is-link tooltip is-tooltip-multiline" data-tooltip={`${s.info || ''} – ${s.Vorname} ${s.nachname || ''} – ${s.email || ''}`}
                  on:click="{()=>edit=s}">Infotext</button>
                {/if}
                {#if s===edit}
                  <textarea cols="80" rows="10" bind:value={s.info}></textarea><button on:click={info}>Speichern</button>
                {/if}
              </td>
            </tr>
          {/each}
        </tbody>
      </table>
    {/each}
  </div>
</div>
<script>
  export let schueler, privat
  let nur_aktive
  let wahlergebnis_schueler = []
  let wahlergebnis_lehrer = []
  let edit
  let lehrer_edit
  let lehrer=[]
  const { Pool } = R('pg')
  const pool = new Pool({ connectionString: privat.mein_bk_db})
  pool.query(`SELECT * from lehrer`).then(res=>lehrer=res.rows)
  const lehrer_info = async _ => {
    const query = `UPDATE lehrer SET info=$2 where id=$1`
    const values = [lehrer_edit.id, lehrer_edit.info]
    try {
      await pool.query(query, values)
    } catch (e) {console.log(e)}
  }
  const info = async _ => {
    const query = `UPDATE schueler SET info=$2 where id=$1`
    const values = [edit.id, edit.info]
    try {
      await pool.query(query, values)
    } catch (e) {console.log(e)}
  }
  const lehrer_waehlbar = async _ => {
    const query = `UPDATE lehrer SET waehlbar=$2 where id=$1`
    const values = [lehrer_edit.id, !lehrer_edit.waehlbar]
    try {
      await pool.query(query, values)
    } catch (e) {console.log(e)}
  }
  const check_aktiv = async (s, art) => {
    const query = `INSERT INTO schueler(id, ${art}, vorname, klasse)
                   VALUES($1, $2, $3, $4)
                   ON CONFLICT (id) DO
                    UPDATE SET ${art}=$2
                    WHERE schueler.id=$1
                   RETURNING ${art}`
    const values=[s.id, !s[art], s.Vorname, s.Klasse]
    try {
      const res = await pool.query(query, values)
      const data = res.rows[0]
      s[art] = data[art]
      schueler = schueler
    } catch(err) {
      console.log(err.stack)
    }
  }
  async function hole_ergebnisse () {
    const query = `SELECT *,
                  (SELECT COUNT(*)
                    FROM sprecher
                    WHERE sprecher.schueler_id = schueler.id
                  ) as gewaehlt_sprecher,
                  (SELECT COUNT(*)
                    FROM schuko
                    WHERE schuko.schueler_id = schueler.id
                  ) as gewaehlt_schuko
                  FROM schueler`
    const query2 = `SELECT *,
                  (SELECT COUNT(*)
                    FROM verbindungslehrer
                    WHERE verbindungslehrer.lehrer_id = lehrer.id
                  ) as gewaehlt_lehrer
                  FROM lehrer`
    try {
      const res = await pool.query(query)
      wahlergebnis_schueler = res.rows
      const res2 = await pool.query(query2)
      wahlergebnis_lehrer = res2.rows
    }
    catch (e) {
      console.log(e)
      return []
    }
  }
  hole_ergebnisse()
</script>
<style>
  @import './node_modules/bulma-tooltip/dist/css/bulma-tooltip.min.css';
</style>
