from os import makedirs
from pathlib import Path

import matplotlib.pyplot as plt
import seaborn as sns

sns.set_theme()
params = {
    "font.family": "Serif",
    "font.serif": "Roman",
    "text.usetex": True,
    "axes.titlesize": "large",
    "axes.labelsize": "large",
    "xtick.labelsize": "large",
    "ytick.labelsize": "large",
    "legend.fontsize": "medium",
}
plt.rcParams.update(params)


def plot(indir, outdir):
    if not (path := Path(outdir)).exists():
        makedirs(path)

    files = [
        "no_burn_in.txt",
        "burn_in.txt",
    ]
    labels = [
        "Without",
        "With",
    ]
    colors = [
        "darkred",
        "seagreen",
    ]

    figure1, ax1 = plt.subplots()
    figure2, ax2 = plt.subplots()
    figure3, ax3 = plt.subplots()
    figure4, ax4 = plt.subplots()

    for file, label, color in zip(files, labels, colors):
        t = []
        e = []
        m = []
        CV = []
        X = []

        with open(Path(indir, file)) as f:
            lines = f.readlines()
            for line in lines:
                l = line.strip().split(",")
                t.append(float(l[0]))
                e.append(float(l[1]))
                m.append(float(l[2]))
                CV.append(float(l[3]))
                X.append(float(l[4]))

        ax1.plot(t, e, label=label, color=color)
        ax2.plot(t, m, label=label, color=color)
        ax3.plot(t, CV, label=label, color=color)
        ax4.plot(t, X, label=label, color=color)

    ax1.set_xlabel(r"T $(J/k_{B})$")
    ax1.set_ylabel(r"$\langle \epsilon \rangle$ $(J)$")
    ax1.legend(title="Burn-in time", loc="upper right")

    ax2.set_xlabel(r"T $(J/k_{B})$")
    ax2.set_ylabel(r"$\langle |m| \rangle$ $(unitless)$")
    ax2.legend(title="Burn-in time", loc="upper right")

    ax3.set_xlabel(r"T $(J/k_{B})$")
    ax3.set_ylabel(r"$C_{V}$ $(k_{B})$")
    ax3.legend(title="Burn-in time", loc="upper right")

    ax4.set_xlabel(r"T $(J/k_{B})$")
    ax4.set_ylabel(r"$\chi$ $(1/J)$")
    ax4.legend(title="Burn-in time", loc="upper right")

    figure1.savefig(Path(outdir, "energy.pdf"), bbox_inches="tight")
    figure2.savefig(Path(outdir, "magnetization.pdf"), bbox_inches="tight")
    figure3.savefig(Path(outdir, "heat_capacity.pdf"), bbox_inches="tight")
    figure4.savefig(Path(outdir, "susceptibility.pdf"), bbox_inches="tight")

    plt.close(figure1)
    plt.close(figure2)
    plt.close(figure3)
    plt.close(figure4)


if __name__ == "__main__":
    plot(
        "./data/hp/test_burn_in_time/",
        "./latex/images/test_burn_in",
    )
