"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.UnresolvedAddressesValidator = exports.UnresolvedAddressValidator = exports.AddressValidator = void 0;
/*
 *
 * Copyright 2018-present NEM
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */
const symbol_sdk_1 = require("symbol-sdk");
const account_service_1 = require("../services/account.service");
/**
 * Address validator
 */
class AddressValidator {
    /**
     * Validates if an address object can be created from a string.
     * @param {string} value - Raw address.
     * @returns {true | string}
     */
    validate(value) {
        try {
            symbol_sdk_1.Address.createFromRawAddress(value);
        }
        catch (err) {
            return 'Enter a valid address. Example: TBI774-YMFDZI-FPEPC5-4EKRC2-5DKDZJ-H2QVRW-4HB';
        }
        return true;
    }
}
exports.AddressValidator = AddressValidator;
/**
 * Unresolved address validator
 */
class UnresolvedAddressValidator {
    /**
     * Validates if an address object can be created from a string.
     * @param {string} value - Raw address. If starts with '@', then it is an alias.
     * @returns {true | string}
     */
    validate(value) {
        try {
            account_service_1.AccountService.getUnresolvedAddress(value);
        }
        catch (_a) {
            return 'Enter a valid address. Example: TBI774-YMFDZI-FPEPC5-4EKRC2-5DKDZJ-H2QVRW-4HB';
        }
        return true;
    }
}
exports.UnresolvedAddressValidator = UnresolvedAddressValidator;
/**
 * Public keys validator
 */
class UnresolvedAddressesValidator {
    /**
     * Validates multiple addresses format.
     * @param {string} value - Public keys, separated by a comma.
     * @returns {true | string}
     */
    validate(value) {
        const publicKeys = value.split(',');
        let error = '';
        publicKeys.forEach((publicKey) => {
            const validation = new UnresolvedAddressValidator().validate(publicKey);
            if (typeof validation === 'string') {
                error = validation;
            }
        });
        if (!error) {
            return true;
        }
        return error;
    }
}
exports.UnresolvedAddressesValidator = UnresolvedAddressesValidator;
