#!/usr/bin/env python3
"""Legt zwei weitere abgeschlossene Muster-Törns für Lizenz Nr. 3 an, an denen sich die neuen Funktionen zeigen lassen:
  - Boot und Kennzeichen im Törn
  - Wachführer-Wechsel (Wachwechsel-Einträge) mit mehreren Crew-Namen -> Wachstatistik im PDF
  - Törn D: der Eigner-Name ist nur für diesen Törn überschrieben (Feld cn, wie über "Crew-Namen" im Logbuch)
Aufruf (im Ordner /var/www/geo-gleinig.de):
    sudo -u www-data python3 muster-logbuch-crew.py          # anlegen (mehrfach ausführbar, überschreibt nur diese Muster)
    sudo -u www-data python3 muster-logbuch-crew.py weg      # diese Muster wieder entfernen
Die ersten Muster aus muster-logbuch.py bleiben unberührt. Ein Neustart des Dienstes ist nicht nötig."""
import sqlite3, json, sys, os
from datetime import datetime
from zoneinfo import ZoneInfo

LID = 3
DB = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'daten', 'lizenzen.db')
TZ = ZoneInfo('Europe/Berlin')

def ms(s):
    return int(datetime.strptime(s, '%Y-%m-%d %H:%M').replace(tzinfo=TZ).timestamp() * 1000)

def W(zt, name, lat, lon, wx, bf, ws, wd, cog, sog):
    """Wachwechsel-Eintrag: die Notiz 'Wachführer: Name' steuert Wachzeit und Statistik."""
    return (zt, 'Wachwechsel', lat, lon, wx, bf, ws, wd, cog, sog, 'Wachführer: ' + name)

# Felder je Eintrag: Zeit, Art, lat, lon, Wetter (Index), Bft, Wind kn, Windrichtung (Index 0-15, woher), Kurs, Fahrt kn, Notiz
def toerns(eigner):
    skipper = eigner + ' (Skipper)'
    return [
        dict(id='TmusterC1', n='Muster: Flensburger Förde – Sønderborg', b='Seeschwalbe', kz='GER 4711',
             v='Flensburg', z='Sønderborg', s='2026-10-25 08:30', c='2026-10-25 17:40', cn=None, e=[
            ('2026-10-25 08:50', 'Ablegen',        54.7930,  9.4350, 1, 3, 9.0,  12,  30, 0.0, 'Leinen los am Hafen Flensburg.'),
            ('2026-10-25 08:55', 'Motor an',       54.8000,  9.4500, 1, 3, 9.0,  12,  40, 4.5, 'Aus dem Hafen unter Motor.'),
            ('2026-10-25 09:35', 'Motor aus',      54.8300,  9.5100, 1, 4, 12.0, 12,  60, 5.4, ''),
            ('2026-10-25 09:40', 'Segel gesetzt',  54.8350,  9.5200, 1, 4, 12.0, 12,  60, 5.6, 'Groß und Fock gesetzt.'),
            W('2026-10-25 10:30', 'Anna',           54.8600,  9.7000, 1, 4, 13.0, 12,  75, 6.1),
            ('2026-10-25 11:10', 'Wende',          54.8750,  9.8500, 1, 4, 13.0, 12,  70, 6.0, ''),
            W('2026-10-25 12:30', 'Jonas',          54.9050, 10.0500, 2, 5, 17.0, 13,  80, 6.6),
            ('2026-10-25 13:05', 'Reff 1',         54.9150, 10.1500, 2, 5, 18.0, 13,  85, 6.3, 'Böen bis 24 kn, Reff im Groß.'),
            W('2026-10-25 14:30', 'Mia',            54.9300, 10.3000, 2, 4, 14.0, 13,  90, 6.0),
            ('2026-10-25 15:20', 'Reff ausgeschüttelt', 54.9350, 10.4200, 1, 3, 9.0, 12, 95, 5.0, 'Wind lässt nach.'),
            W('2026-10-25 16:10', eigner,           54.9300, 10.5400, 1, 3, 8.0,  12, 100, 4.6),
            ('2026-10-25 17:00', 'Motor an',       54.9290,  9.8500, 1, 2, 5.0,  11, 115, 4.4, 'Segel runter, Hafeneinfahrt unter Motor (kein Motor-aus-Eintrag, endet beim Anlegen).'),
            ('2026-10-25 17:20', 'Angelegt',       54.9280,  9.7700, 1, 2, 5.0,  11, 120, 0.0, 'Fest in Sønderborg, Törn beendet.'),
        ]),
        dict(id='TmusterD1', n='Muster: Schlei – Kappeln – Maasholm', b='Möwe', kz='',
             v='Schleswig', z='Maasholm', s='2026-10-28 09:00', c='2026-10-28 16:50', cn={eigner: skipper}, e=[
            ('2026-10-28 09:20', 'Ablegen',        54.5120,  9.5660, 2, 2, 6.0,   9,  80, 0.0, 'Ablegen in Schleswig, Schleibrücken vorab angemeldet.'),
            ('2026-10-28 10:10', 'Motor an',       54.5300,  9.7000, 2, 2, 6.0,   9,  90, 4.5, 'Enge Fahrwasser, unter Motor.'),
            W('2026-10-28 10:50', 'Tim',            54.5500,  9.8500, 2, 3, 8.0,   9,  95, 4.8),
            ('2026-10-28 11:40', 'Funkkontakt',    54.5700,  9.9500, 0, 3, 8.0,   9,  95, 4.9, 'Brückenöffnung Lindaunis angefragt.'),
            W('2026-10-28 12:30', 'Mia',            54.6300, 10.0200, 0, 3, 8.0,  10,  70, 5.0),
            ('2026-10-28 13:00', 'Crew-Check ok',  54.6350, 10.0400, 0, 3, 8.0,  10,  70, 5.0, 'Alle wohlauf, Mittagspause.'),
            W('2026-10-28 14:10', skipper,          54.6700, 10.0500, 1, 3, 9.0,  10,  50, 5.3),
            ('2026-10-28 15:25', 'Motor aus',      54.6790, 10.0550, 1, 4, 11.0, 10,  45, 5.2, ''),
            ('2026-10-28 15:30', 'Segel gesetzt',  54.6800, 10.0600, 1, 4, 11.0, 10,  45, 5.8, 'Raus aus der Schlei, Segel gesetzt.'),
            ('2026-10-28 16:10', 'Motor an',      54.6880, 10.0300, 1, 2, 6.0,  10,  40, 4.0, 'Segel runter, Maasholmer Hafen unter Motor.'),
            ('2026-10-28 16:35', 'Angelegt',       54.6900, 10.0200, 1, 2, 5.0,  10,  40, 0.0, 'Fest in Maasholm.'),
        ]),
    ]

def main():
    if not os.path.exists(DB): sys.exit('Datenbank nicht gefunden: ' + DB)
    c = sqlite3.connect(DB)
    row = c.execute('SELECT label FROM licenses WHERE id=?', (LID,)).fetchone()
    if not row: sys.exit('Lizenz %d existiert nicht.' % LID)
    eigner = row[0]   # Name der Lizenz = Eigner im Törn
    weg = len(sys.argv) > 1 and sys.argv[1] == 'weg'
    T = toerns(eigner)
    for t in T:
        c.execute("DELETE FROM logbuch WHERE license_id=? AND (eid=? OR data LIKE ?)", (LID, t['id'], '%"tid": "' + t['id'] + '"%'))
        if weg: continue
        td = {'id': t['id'], 'k': 't', 'n': t['n'], 'b': t['b'], 'kz': t['kz'], 'v': t['v'], 'z': t['z'], 's': ms(t['s']), 'c': ms(t['c'])}
        if t['cn']: td['cn'] = t['cn']
        c.execute('INSERT INTO logbuch(license_id, eid, data) VALUES(?,?,?)', (LID, t['id'], json.dumps(td, ensure_ascii=False)))
        for i, (zt, ty, lat, lon, wx, bf, ws, wd, cog, sog, note) in enumerate(t['e'], 1):
            eid = 'm%s%02d' % (t['id'][-2:], i)
            d = {'id': eid, 'tid': t['id'], 't': ms(zt), 'lat': lat, 'lon': lon, 'wx': str(wx), 'bf': str(bf), 'ws': ws,
                 'wd': str(wd), 'cog': cog, 'sog': sog, 'ty': ty, 'note': note}
            c.execute('INSERT INTO logbuch(license_id, eid, data) VALUES(?,?,?)', (LID, eid, json.dumps(d, ensure_ascii=False)))
    c.commit(); c.close()
    print('Muster entfernt.' if weg else 'Fertig: %d Törns mit %d Einträgen für Lizenz %d (%s) angelegt.' % (len(T), sum(len(t['e']) for t in T), LID, eigner))

main()
