package com.iotize.plugin.cordova.zebrarfid;

import com.zebra.rfid.api3.InvalidUsageException;
import com.zebra.rfid.api3.OperationFailureException;

public class PluginError extends Exception {

    final String code;

    public PluginError(String code, String msg) {
        super(msg);
        this.code = code;
    }

    public static PluginError illegalAction(String msg) {
        return new PluginError(PluginError.Code.ILLEGAL_ACTION, msg);
    }

    public static PluginError fromError(Throwable err) {
        if (err instanceof PluginError) {
            return (PluginError) err;
        }
        else if (err instanceof OperationFailureException) {
            OperationFailureException operationFailureError = (OperationFailureException) err;
            String code = operationFailureError.getStatusDescription();
            return new PluginError(code, operationFailureError.getVendorMessage());
        } else if (err instanceof InvalidUsageException) {
            InvalidUsageException invalidUsageError = (InvalidUsageException) err;
            String code = invalidUsageError.getVendorMessage();
            String msg = invalidUsageError.getInfo();
            return new PluginError(code, msg);
        }
        else {
            return new PluginError(PluginError.Code.UNKNOWN, err.getMessage());
        }
    }

    public static Exception illegalParameter(String msg) {
        return new PluginError(Code.ILLEGAL_ARGUMENT, msg);
    }

    public interface Code {
        String ILLEGAL_ARGUMENT = "IllegalArgument";
        String ILLEGAL_ACTION = "IllegalAction";
        String UNKNOWN = "UnkownError";
    }

}
