package net.viper.status.stats;

import java.io.*;

/**
 * Fix #9: save() und load() sind jetzt synchronized um Race Conditions
 * zwischen Auto-Save-Task und Shutdown-Aufruf zu verhindern.
 */
public class StatsStorage {
    private final File file;
    private final Object fileLock = new Object();

    public StatsStorage(File pluginFolder) {
        if (!pluginFolder.exists()) pluginFolder.mkdirs();
        this.file = new File(pluginFolder, "stats.dat");
    }

    public void save(StatsManager manager) {
        synchronized (fileLock) {
            try (BufferedWriter bw = new BufferedWriter(new FileWriter(file))) {
                for (PlayerStats ps : manager.all()) {
                    bw.write(ps.toLine());
                    bw.newLine();
                }
                bw.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public void load(StatsManager manager) {
        if (!file.exists()) return;
        synchronized (fileLock) {
            try (BufferedReader br = new BufferedReader(new FileReader(file))) {
                String line;
                while ((line = br.readLine()) != null) {
                    PlayerStats ps = PlayerStats.fromLine(line);
                    if (ps != null) manager.put(ps);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
