/**
 * Title:        Pommeja taivaalta
 * Description:  Geneerinen räiskintäpeli Javalla
 * Copyright:    Copyright (c) 2003
 *
 * @author Juho Makkonen
 * @version 1.0
 */


import java.util.Date;
import java.text.SimpleDateFormat;


/**
 * Tulosrivi-luokan olio on yksi tulostaulukon rivi.
 * Olen käyttänyt pohjana nelosharjoituksessa tehtyä
 * ratkaisuani. Pyörää ei kannata keksiä uudelleen.
 */
public class Tulosrivi implements Comparable {

    /** Pelaajan nimi. */
    private String pelaajanNimi;

    /** Peliaika. */
    private int peliaika;

    /** Pelin loppumisen päivämäärä ja kellonaika. */
    private Date ajankohta;

    /** Muuttaa ajankohdan oikeaan muotoon. */ 
    private SimpleDateFormat aika = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");

    /** Pelaajan pisteet. */ 
    private int pisteet;
    
    /** Pelaajan tuhoamat pommit. */
    private int tuhotutPommit;
           
   
    /**
     * Luo uuden tulosrivin.
     *
     * @param pelaajanNimi pelaajan nimi
     * @param ajankohta tulosrivin luontiaika
     * @param peliaika peliaika
     * @param tuhotutPommit tuhotut pommit
     * @param pisteet pelaajan pisteet
     */ 
    public Tulosrivi(String pelaajanNimi, Date ajankohta,
		     int peliaika, int tuhotutPommit,
		     int pisteet) {

	// Ominaismuuttujan <code>pelaajanNimi</code>
	// arvoksi parametrina annettu pelaajannimi.
	this.pelaajanNimi = pelaajanNimi;

	// Ominaismuuttujan <code>ajankohta</code>
	// arvoksi parametrina annettu ajankohta.
	this.ajankohta = ajankohta;

	// Ominaismuuttujan <code>peliaika</code>
	// arvoksi parametrina annettu peliaika.
	this.peliaika = peliaika;

	// Ominaismuuttujan <code>pisteet</code>
	// arvoksi parametrina annettu pisteet.
	this.pisteet = pisteet;

	// Ominaismuuttujan <code>tuhotutPommit</code>
	// arvoksi parametrina annettu tuhottujen
	// pommien määrä.
	this.tuhotutPommit = tuhotutPommit;

    }
	

    /**
     * Palauttaa pelaajan nimen.
     *
     * @return pelaajan nimi
     */
    public String annaPelaajanNimi() {
	return pelaajanNimi;
    }


    /**
     * Palauttaa peliajan.
     *
     * @return peliaika
     */
    public int annaPeliaika() {
	return peliaika;
    }


    /**
     * Palauttaa pelin ajankohdan.
     * 
     * @return pelin ajankohta
     */
    public Date annaAjankohta() {
	return ajankohta;
    }


    /** 
     * Palauttaa pelaajan pistemäärän.
     *
     * @return pelaajan pisteet
     */
    public int annaPistemaara() {
	return pisteet;
    }

    
    /**
     * Palauttaa tuhottujen pommien määrän.
     *
     * @return pelaajan tuhoamat pommit
     */
    public int annaTuhotutPommit() {
	return tuhotutPommit;
    }


    /**
     * Vertailee tulosriviä parametrinä annettuun
     * tulosriviin. Ensin verrataan pistemäärän,
     * sitten kuluneen peliajan (mitä kauemmin on
     * selviytynyt, sitä parempi) ja lopuksi
     * tuloksen syntyajankohdan (aikaisemmin syntynyt
     * tulos säilyttää paikkansa) perusteella.
     * 
     * @param o Olio o
     * @return -1, jos parametrinä annettu tulosrivi
     * voittaa, 1, jos häviää, 0 jos tulee tasapeli. 
     */ 
    public int compareTo(Object o) {
	Tulosrivi rivi = (Tulosrivi)o;
	int vertailu = rivi.pisteet - pisteet;
	if (vertailu != 0) {
	    return vertailu;
	} else {
	    vertailu = rivi.peliaika - peliaika;
	    if (vertailu != 0) {
		return vertailu;
	    } else {
		return ajankohta.compareTo(rivi.ajankohta)*-1;
	    }
	}
    }

    
    /**
     * toString() -metodin uudelleen määritys.
     *
     * @return pelaajan nimi, ajankohta,
     * peliaika, tuhotut pommit ja pelaajan pisteet
     */
    public String toString() {
	return (annaPelaajanNimi() + "&" + aika.format(annaAjankohta()) +
		"&" + annaPeliaika() + "&" + annaTuhotutPommit()
		+ "&" + annaPistemaara());
    }

}

