"""
main.py  für remove4weeks

Checked per cron jeden Tag die 'anmeldungen'-Tabelle in der Datenbank.
Prüft für jeden Teilnehmer ob
    - entweder die Führung abgesagt wurde
    - oder 4 Wochen seit der teilgenommenen Führung vergangen sind.
Ist das der Fall, werden die persönlichen Daten des Teilnehmers mit '-' in der
Datenbank überschrieben.

TODO
- Statistik-Daten behalten: Anzahl der Anfragen, davon zugesagt, davon abgesagt und
ggf. in eine eigenen Tabelle merken


Versions:
V 1.3   2022-12-08  rxf
    - 'abgesagte' werden nicht mehgr gelöscht

V 1.2   2022-11-03  rxf
    - 'nicht teilgenomme' werden nicht mehr behandelt
    - SELECT nun nur noch über fdatum der anmelden-Tabelle

V 1.1   2020-10-14  rxf
    - Löschen der reihe nach: erst abgesagt, dann 'nicht teolgenommen' und
      dann älter als 4 Wochen

V 1.0   2020-10-10  rxf
    - erste live gestellte Version

V 0.0   2020-10-08  rxf
    - Start
"""

from datetime import datetime, timedelta, date
import mysql.connector
from mysql.connector import errorcode
import os

# Versionsnummer und Date
VERSION="1.3"
VDATE="2022-12-08"

# Wie viele Tage müssen vergangen sein, damit gelöscht wird?
# default = 28
VTAGE = 28

#    $host = 'localhost';
#    $user = 'db310927';
#    $pass = 'ArktUhr';
#    $dbase = 'db310927';


# Definitionen für die Datenbank
unix_socket=" /var/lib/mysql/mysql.sock"
host = 'localhost'
user = 'db310927'
#password = 'ArktUhr'
password = 'vetivene-albarco-earner'
dbase = 'db310927'

if os.environ.get('STWANMELD') == '1':
    host = "localhost"
    user = "root"
    password = "SFluorit"
    dbase = "sternwarte"


def updateentry(db, id):
    """ Update den Eintrag mit der ID id: es werden alle
    persönlichen Daten mit '-' überschreiben"""

    mycursor = db.cursor()
    dash = '"-"'
    sql = "UPDATE anmeldungen SET " + \
    "name=" + dash + ", vorname=" + dash + ", email=" + dash + ", telefon=" + dash + ", plz=0, strasse=" + dash + ", stadt=" + dash + \
    ", remarks = '' WHERE id=\"" + str(id) + "\""
#    logit(sql)
    mycursor.execute(sql)
    db.commit()
    return mycursor.rowcount



def removeabgesagte(db):
    """ Alle abgesagten Teilnehmer finden und deren IDs übergeben """
    abgesagte = []
    mycursor = db.cursor()
    delcount = 0

    sql = "SELECT id FROM anmeldungen WHERE abgesagt=1 AND name != '-'"
    mycursor.execute(sql)
    myresult = mycursor.fetchall()
    logstr = "Abgesagt: "
    for x in myresult:
        logstr += str(x[0]) + ','
        abgesagte.append(x[0])
        delcount += updateentry(db, x[0])
    logit(logstr)
    logit('Anzahl Abgesagte: ' + str(delcount))
    return delcount

# def removeNICHTteilgenommene(db):
#     """ Alle Teilnehmer holen, die bei der gestrigen Führung
#     zwar angemeldet waren aber nicht teilgenommen haben. """
#     nichtteilg = []
#     mycursor = db.cursor()
#     delcount = 0
#     sql = "SELECT anmeldungen.id FROM anmeldungen INNER JOIN fdatum ON anmeldungen.fid=fdatum.id WHERE DATE_ADD(DATE(fdatum.datum),INTERVAL 1 DAY)<=DATE(NOW()) AND teilgenommen = 0 AND name != '-'"
#     mycursor.execute(sql)
#     myresult = mycursor.fetchall()
#     logstr = "Nicht teilgenommen: "
#     for x in myresult:
#         logstr += str(x[0]) + ','
#         nichtteilg.append(x[0])
#         delcount += updateentry(db, x[0])
#     logit(logstr)
#     return delcount


def remove4weekold(db):
    """ Alle Teilnehmer IDs holen, die vor 4 Wochen bei einer Führung waren
    bzw. für eine Führung angemeldet waren"""
    mustdelete = []
    mycursor = db.cursor()
    delcount = 0

    sql = "SELECT id FROM anmeldungen WHERE DATE_ADD(DATE(fdatum),INTERVAL " + str(VTAGE) + " DAY)<=DATE(NOW()) AND name != '-'"
    mycursor.execute(sql)
    myresult = mycursor.fetchall()
    logstr = "4 Wochen alt: "
    for x in myresult:
        logstr += str(x) + ','
        mustdelete.append(x[0])
        delcount += updateentry(db, x[0])
    logit(logstr)
    logit('Anazhl 4 Wochen alte: : ' + str(delcount))
    return delcount


def logit(arg):
    """ Ausgabe der Parameter mit einen Zeitstempel"""
    now = datetime.now()
    out = now.strftime("%Y-%m-%d %H:%M:%S") + " - " + arg
    print(out)


def main():
    logit('Start - Version ' + VERSION + " vom " + VDATE)
    try:
        mydb = mysql.connector.connect(
            unix_socket=unix_socket,
#            host=host,
            user=user,
            password=password,
            database=dbase
        )
#       acount = removeabgesagte(mydb)
#       count += removeNICHTteilgenommene(mydb)
        bcount = remove4weekold(mydb)
        logit('Geloescht wurden ' + str(bcount) + ' Eintraege.')

    except mysql.connector.Error as err:
        if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
            print("Something is wrong with your user name or password")
        elif err.errno == errorcode.ER_BAD_DB_ERROR:
            print("Database does not exist")
        else:
            print(err)
    logit("End\n");

if __name__ == "__main__":
    main()

