"""Export-Service fuer CSV und Excel."""

import csv
import io
from datetime import datetime

from openpyxl import Workbook
from sqlalchemy.orm import Session

from models.kontakt import Kontakt


def kontakte_csv(db: Session, typ: str = None) -> str:
    """Kontakte als CSV exportieren."""
    query = db.query(Kontakt)
    if typ:
        query = query.filter(Kontakt.typ == typ)
    kontakte = query.order_by(Kontakt.nachname, Kontakt.vorname).all()

    output = io.StringIO()
    writer = csv.writer(output, delimiter=";")

    header = [
        "ID", "Typ", "Anrede", "Titel", "Vorname", "Nachname",
        "Firmenname", "Position", "Strasse", "PLZ", "Ort", "Land",
        "E-Mail 1", "E-Mail 2", "Telefon", "Telefon direkt", "Mobil",
        "Fax", "Webseite", "Bemerkung",
    ]
    writer.writerow(header)

    for k in kontakte:
        writer.writerow([
            k.id, k.typ, k.anrede, k.titel, k.vorname, k.nachname,
            k.firmenname, k.position, k.strasse, k.plz, k.ort, k.land,
            k.email1, k.email2, k.telefon, k.telefon_direkt, k.mobil,
            k.telefax, k.webseite, k.bemerkung,
        ])

    return output.getvalue()


def kontakte_excel(db: Session, typ: str = None) -> bytes:
    """Kontakte als Excel exportieren."""
    query = db.query(Kontakt)
    if typ:
        query = query.filter(Kontakt.typ == typ)
    kontakte = query.order_by(Kontakt.nachname, Kontakt.vorname).all()

    wb = Workbook()
    ws = wb.active
    ws.title = "Kontakte"

    header = [
        "ID", "Typ", "Anrede", "Titel", "Vorname", "Nachname",
        "Firmenname", "Position", "Strasse", "PLZ", "Ort", "Land",
        "E-Mail 1", "E-Mail 2", "Telefon", "Telefon direkt", "Mobil",
        "Fax", "Webseite", "Bemerkung",
    ]
    ws.append(header)

    for k in kontakte:
        ws.append([
            k.id, k.typ, k.anrede, k.titel, k.vorname, k.nachname,
            k.firmenname, k.position, k.strasse, k.plz, k.ort, k.land,
            k.email1, k.email2, k.telefon, k.telefon_direkt, k.mobil,
            k.telefax, k.webseite, k.bemerkung,
        ])

    output = io.BytesIO()
    wb.save(output)
    return output.getvalue()
