/*
  Copyright (c) January 2022 by Paweł Rzechonek
  Kopiowanie konsoli (klawiatura) do pliku.
  Nazwa pliku przekazana przez argumenty wywołania programu.
*/

import java.io.*;
import java.util.*;

class Osoba implements Serializable, Comparable<Osoba> {
    String imię, nazwisko;
    GregorianCalendar ur;
    double wzrost;
    int waga;
    public Osoba(String im, String naz, GregorianCalendar u, double wz, int wg) {
        imię = im;
        nazwisko = naz;
        ur = u;
        wzrost = wz;
        waga = wg;
    }
    @Override
    public int compareTo(Osoba os) {
        int naz = nazwisko.compareTo(os.nazwisko);
        if (naz < 0) return -1;
        if (naz > 0) return 1;
        int im = imię.compareTo(os.imię);
        if (im < 0) return -1;
        if (im > 0) return 1;
        return 0;
    }
    @Override
    public String toString() {
        int wiek = new GregorianCalendar().get(GregorianCalendar.YEAR) - ur.get(GregorianCalendar.YEAR);
        return String.format("%s %s, %d lat(a)", imię, nazwisko, wiek);
    }
}

public class SerializacjaOsoby {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        File plik = new File("osoba.ser");
        Set<Osoba> zbiórWyj = new TreeSet<>();
        zbiórWyj.add(new Osoba("Jan", "Nowak", new GregorianCalendar(2000, 11, 5), 1.78, 63));
        zbiórWyj.add(new Osoba("Anna", "Kowalska", new GregorianCalendar(1998, 10, 30), 1.58, 53));
        zbiórWyj.add(new Osoba("Maria", "Zagórska", new GregorianCalendar(1991, 9, 23), 1.64, 61));
        zbiórWyj.add(new Osoba("Jacek", "Bronowicki", new GregorianCalendar(2004, 8, 17), 1.81, 80));
        for (Osoba os: zbiórWyj)
            System.out.println(os);
        try (ObjectOutputStream fos = new ObjectOutputStream(new FileOutputStream(plik))) {
            fos.writeObject(zbiórWyj);
        }
        System.out.println("================");
        Set<Osoba> zbiórWej = null;
        try (ObjectInputStream fis = new ObjectInputStream(new FileInputStream(plik))) {
            zbiórWej = (TreeSet<Osoba>) fis.readObject();
        }
        for (Osoba os: zbiórWej)
            System.out.println(os);
    }
}
