/**
 * BankingAccountReference.check has two functions:
 *  - check if the reference is valid
 *  - normalize the reference
 *
 * @param $reference            reference to be checked
 * @param $reference_type       id (not value) of the reference type OptionValue
 * @param $reference_type_name  name of reference type, e.g. NBAN_DE
 * 
 * @return 'is_valid'   0/1: is the given reference valid? 0 could also mean "not checked", see below
 *         'checked'    0/1: could the value be checked? If 0, there is no implementation for this type
 *         'normalised' 0/1: was the reference normalised?
 *         'reference'  the normalised reference
 *         'original'   the reference as queried
 */
function civicrm_api3_banking_account_reference_check($params)
{
    if (empty($params['reference'])) {
        return civicrm_api3_create_error("No 'reference' parameter given.");
    }
    if (!empty($params['reference_type'])) {
        // look up reference_type_name
        $params['reference_type_name'] = civicrm_api3('OptionValue', 'getvalue', array('id' => (int) $params['reference_type'], 'return' => 'name'));
    }
    if (empty($params['reference_type_name'])) {
        return civicrm_api3_create_error("No 'reference_type_name' parameter given.");
    }
    $reference = $params['reference'];
    $reply = array('original' => $reference);
    $result = CRM_Banking_BAO_BankAccountReference::normalise($params['reference_type_name'], $reference);
    if ($result === FALSE) {
        $reply['is_valid'] = 0;
        $reply['checked'] = 0;
        $reply['normalised'] = 0;
    } elseif ($result === 0) {
        $reply['is_valid'] = 0;
        $reply['checked'] = 1;
        $reply['normalised'] = 0;
    } elseif ($result === 1) {
        $reply['is_valid'] = 1;
        $reply['checked'] = 1;
        $reply['normalised'] = 0;
    } elseif ($result === 2) {
        $reply['is_valid'] = 1;
        $reply['checked'] = 1;
        $reply['normalised'] = 1;
    } else {
        return civicrm_api3_create_error("Internal error");
    }
    $reply['reference'] = $reference;
    return civicrm_api3_create_success($reply);
}