package time;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Journal {

    protected Time[] entries;

    private Journal(Time[] entries) {
        this.entries = entries;
    }

    public static Journal readJournal(String fname) {
        try {
            Scanner sc = new Scanner(new File(fname));
            String line;
            Time value;
            List<Time> entries = new ArrayList<>();

            while (sc.hasNextLine()) {
                line = sc.nextLine();
                value = Time.makeTime(line);
                if (value == null) continue;
                entries.add(value);
            }

            return (entries.size() > 0)
              ? new Journal(entries.toArray(new Time[0]))
              : null;
        }
        catch (IOException e) {
            return null;
        }
    }

    public Time[] getEntries() {
        Time[] result = new Time[entries.length];

        for (int i = 0; i < entries.length; i++)
            result[i] = new Time(entries[i]);

        return result;
    }

    @Override
    public boolean equals(Object o) {
        if (o instanceof Journal) {
            Journal j = (Journal) o;
            return Arrays.deepEquals(this.entries, j.entries);
        }
        return false;
    }

    @Override
    public int hashCode() {
        return Arrays.deepHashCode(entries);
    }

    @Override
    public String toString() {
        return Arrays.deepToString(entries);
    }
}
