import csv

class Export:
    def __init__(self):
        pass

    @staticmethod
    def matrix_to_csv(dateiname, liste_spaltenbeschriftung, liste_zeilenbeschriftung, Matrix, beschriftung_kopfzeile = ""):
        with open(dateiname, "w", newline="", encoding="utf-8") as csvfile:
            writer = csv.writer(csvfile, delimiter=";")

            kopfzeile = [beschriftung_kopfzeile]
            for spaltenbeschriftung in liste_spaltenbeschriftung:
                kopfzeile.append(str(spaltenbeschriftung))
            writer.writerow(kopfzeile)

            for zeilenbeschriftung, zeile in zip(liste_zeilenbeschriftung, Matrix.tolist()):
                zeile_als_text = [zeilenbeschriftung]
                for eintrag in zeile:
                    try:
                        eintrag_text = str(eintrag).replace(".", ",")
                    except Exception:
                        eintrag_text = str(eintrag)
                    zeile_als_text.append(eintrag_text)
                writer.writerow(zeile_als_text)

    @staticmethod
    def ausgleichung_to_datei(dateiname, dict_ausgleichung):
        with open(dateiname, "w", newline="", encoding="utf-8") as csvfile:
            writer = csv.writer(csvfile, delimiter=";")

            writer.writerow(["Parameter", "Wert"])

            for key, value in dict_ausgleichung.items():

                if hasattr(value, "tolist"):
                    rows = value.rows
                    cols = value.cols

                    writer.writerow([key, f"Matrix {rows}x{cols}"])

                    for i, zeile in enumerate(value.tolist()):
                        zeile_als_text = [f"{key}_zeile_{i+1}"]
                        for eintrag in zeile:
                            try:
                                eintrag_float = float(eintrag)
                                eintrag_text = f"{eintrag_float}".replace(".", ",")
                            except Exception:
                                eintrag_text = str(eintrag)
                            zeile_als_text.append(eintrag_text)
                        writer.writerow(zeile_als_text)

                else:
                    try:
                        value_float = float(value)
                        value_text = f"{value_float}".replace(".", ",")
                    except Exception:
                        value_text = str(value)

                    writer.writerow([key, value_text])