package post;

import post.mail.Letter;

/**
 * Definiáljuk a postást ábrázoló Postman osztályt a post csomagban! Egy postás
 * tudja, hogy melyik utca tartozik hozzá és abban az utcában melyik a
 * legnagyobb páratlan és páros házszám.
 *
 * @author Daniel3ICE
 */
public class Postman {

    final String street;
    /**
     * 3ICE: These should really be final or declared explicitly changeable. Oh
     * well, suppress warning annotation to the rescue!
     */
    @SuppressWarnings("FieldMayBeFinal")
    private int lastOdd, lastEven;

    /**
     * A postás abban az esetben tudja kézbesíteni a levelet, ha van legalább
     * akkora házszám az utcában, mint amekkora a levélen szerepel
     * (getNumber()). Ez persze attól függ, hogy a címzett páros vagy páratlan
     * házszám alatt lakik.
     *
     * @param l paraméterül kap egy levelet
     * @return Ha a postás kézbesíteni tudja a levelet, akkor a deliver() igazat
     * ad vissza, különben pedig hamisat.
     */
    public boolean deliver(Letter l) {
        Short n = l.whereToDeliver().getNumber();
        boolean ret;
        /*DEBUG3ICE*/
        System.out.print("Postman.deliver called with " + this + " on " + l + " where n=" + n);

        //3ICE: The low bit will always be set on an odd number:
        if ((n & 1) == 1) {
            /*DEBUG3ICE*/
            System.out.print(" is odd, lastOdd=" + lastOdd);
            ret = n <= lastOdd;
        } else {
            /*DEBUG3ICE*/
            System.out.print(" is even, lastEven=" + lastEven);
            ret = n <= lastEven;
        }
        /*DEBUG3ICE*/
        System.out.println(". Returning " + ret);
        if (ret) {//3ICE: Instructions did not specify this explicitly, but Test.java asserts it so...
            l.delivered();
        }
        return ret;
    }

    public Postman(String street, int lastOdd, int lastEven) {
        this.street = street;
        this.lastOdd = lastOdd;
        this.lastEven = lastEven;
    }

    public String getStreet() {
        return street;
    }

    @Override
    public String toString() {
        return "Pstmn{str:" + street + ", even:" + lastEven + ", odd:" + lastOdd + "}";
    }

}
