package capitulo07.bloque04.listener;

import java.util.ArrayList;
import java.util.List;

public class Calculadora {
    static List<OperacionesListener> listeners = new ArrayList<OperacionesListener>();

    public static void addOperationsListener(OperacionesListener l) {
        listeners.add(l);
    }
    public static void removeOperationsListener(OperacionesListener l) {
        listeners.remove(l);
    }

    private static void fireSumaMayor1000(float resultado) {
        for (OperacionesListener opl : listeners) {
            opl.sumaMayor1000(new OperacionEvent(resultado));
        }
    }

    private static void fireMultiplicacionMayor1000(float resultado) {
        for (OperacionesListener opl : listeners) {
            opl.multiplicacionMayor1000(new OperacionEvent(resultado));
        }
    }

    private static void fireRestaNegativa(float resultado) {
        for (OperacionesListener opl : listeners) {
            opl.restaNegativa(new OperacionEvent(resultado));
        }
    }

    private static void fireDivision0(float resultado) {
        for (OperacionesListener opl : listeners) {
            opl.divisor0(new OperacionEvent(resultado));
        }
    }

    private static void fireRaizNegativa(float resultado) {
        for (OperacionesListener opl : listeners) {
            opl.raizNegativa(new OperacionEvent(resultado));
        }
    }







    public static float suma(float num1, float num2) {
        float resultado = num1 + num2;
        if (resultado > 1000) fireSumaMayor1000(resultado);
        return resultado;
    }

    public static float multiplica(float num1, float num2) {
        float resultado = num1 * num2;
        if (resultado > 1000) fireMultiplicacionMayor1000(resultado);
        return resultado;
    }

    public static float resta(float num1, float num2) {
        float resultado = num1 - num2;
        if (resultado < 0) fireRestaNegativa(resultado);
        return resultado;
    }

    public static float divide(float num1, float num2) {
        if (num2 == 0) {
            fireDivision0(num2);
            return num2;
        } else {
            return num1 / num2;
        }
    }

    public static float hazRaizCuadrada(float num) {
        if (num < 0) {
            fireRaizNegativa(num);
            return num;
        } else {
            return (float) Math.sqrt(num);
        }
    }
}
