package ru.job4j.principle_001;

import java.util.Comparator;
import java.util.function.BiFunction;

/**
 * Compare by null.
 *
 * @author Petr Arsentev ([email protected])
 * @version $Id$
 * @since 0.1
 */
public class CompareByNull implements Comparator<User> {

    /**
     * ${@inheritDoc}.
     */
    @Override
    public int compare(User left, User right) {
        return compareIfNull(left, right, (lft, rht) -> Integer.compare(lft.age(), rht.age()));
    }


    /**
     * Compare values by null.
     * @param left left value.
     * @param right right value.
     * @param compare if left and right not null then compare by function.
     * @return 1, 0, -1.
     */
    public int compareIfNull(User left, User right, BiFunction<User, User, Integer> compare) {
        int rsl;
        if (left != null && right != null) {
            rsl = compare.apply(left, right);
        } else if (left != null) {
            rsl = -1;
        } else if (right != null) {
            rsl = 1;
        } else {
            rsl = 0;
        }
        return rsl;
    }
}