# chkf.py (erweiterte Version mit Logging, Unit Tests und Docker-Support)
import os
import smtplib
import mysql.connector
from datetime import datetime, timedelta
from email.mime.text import MIMEText
import logging

# Setup Logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s [%(levelname)s] %(message)s')
logger = logging.getLogger(__name__)

# Konfiguration
DEVELOP = os.environ.get("ENV", "DEV") == "DEV"
DAYS =3 

beo_url = 'beoanswer/beoanswer.php?'
base_url = 'http://localhost:8080/' if DEVELOP else 'https://sternwarte-welzheim.de/'

db_config = {
    'host': os.environ.get('DB_HOST', 'localhost'),
    'port': int(os.environ.get('DB_PORT', 3306)),
    'user': os.environ.get('DB_USER', 'root'),
    'password': os.environ.get('DB_PASS', 'SFluorit'),
    'database': os.environ.get('DB_NAME', 'sternwarte')
}

def send_to_beo(info):
    subject = f"Sonderführung vom {info['date']}"
    body = (
        f"Hallo {info['name']},\n\n"
        f"Du hattest gestern Führung für \"{info['kunde']}\"! Bitte fülle folgendes Webformular aus:\n\n"
        f"{base_url}{beo_url}id={info['id']}\n\n"
        "Bitte nur über diesen Link zugreifen (oder exakt abschreiben),\n"
        "da sonst die Zuordnung nicht hergestellt werden kann.\n"
        "Besten Dank.\n\nGrüße vom Sonderführungsteam"
    )

    msg = MIMEText(body)
    msg['Subject'] = subject
    msg['From'] = 'noreply@sternwarte-welzheim.de'
    msg['To'] = info.get('email', 'rexfue@gmail.com')

    try:
        if DEVELOP:
            server = smtplib.SMTP('localhost', 1025)
        else:
            server = smtplib.SMTP('smtp.1und1.de', 587)
            server.starttls()
            server.login('rxf@fuerst-stuttgart.de', 'tibTop-xopqar-1qyrqe')

        server.send_message(msg)
        logger.info(f"Email gesendet an {msg['To']}")
    except Exception as e:
        logger.error("Fehler beim Senden der Mail: %s", e)
    finally:
        server.quit()

def fetch_data_from_db(conn, termin):
    try:
        cursor = conn.cursor(dictionary=True)

        cursor.execute(
            "SELECT mitarbeiter, id, name FROM SoFue2 WHERE DATE(wtermin) = %s AND status = 2",
            (termin,)
        )
        row = cursor.fetchone()
        if not row:
            logger.info("Keine Führung gewesen.")
            return

        mitarbeiter = row['mitarbeiter']
        fuehrung_id = row['id']
        name = row['name']

        cursor.execute(
            "SELECT vorname, email_1 FROM beos WHERE name = %s",
            (mitarbeiter,)
        )
        beo = cursor.fetchone()
        if not beo:
            logger.warning("Kein BEO gefunden für %s", mitarbeiter)
            return

        send_to_beo({
            'name': beo['vorname'],
            'email': beo['email_1'],
            'date': termin,
            'id': fuehrung_id,
	    'kunde': name	
        })

    except Exception as e:
        logger.error("Datenbankfehler: %s", e)
    finally:
        cursor.close()
        conn.close()

def main():
    yesterday = (datetime.today() - timedelta(days=DAYS)).strftime('%Y-%m-%d')
    logger.info("Gestern war: %s", yesterday)
    logger.info("DB-Konfiguration: %s", db_config)

    try:
        conn = mysql.connector.connect(**db_config)
        fetch_data_from_db(conn, yesterday)
    except Exception as e:
        logger.error("Verbindung zur DB fehlgeschlagen: %s", e)

if __name__ == '__main__':
    main()

