/**
 *  @module     Provider
 *  @overview   Defines the utility service `Provider` class
 * 
 *  @author     Animesh Mishra <hello@animesh.ltd>
 *  @copyright  © 2018 Animesh Ltd. All Rights Reserved.
 */

/** Utility providers as supported by Rocket in Pocket */
export class Provider {
    public code: string
    public name: string

    public constructor(json: GetProviderResponse) {
        this.code = json.provider_code
        this.name = json.connection_provider
    }

    /** 
     *  Given an array of provider responses from Rocket in Pocket, instantiates and
     *  returns a `Provider` array. 
     */
    public static InitList(json: Array<GetProviderResponse>): Array<Provider> {
        let providers = Array<Provider>()
        for(var provider of json) {
            providers.push(new Provider(provider))
        }
        return providers
    }

    /** 
     *  Returns a `Provider` with the given provider `code` amongst the list of
     *  `providers` given. If no match is found, returns `null`.
     */
    public static WithCode(code: string, providers: Array<Provider>): Provider | null {
        for (var operator of providers) {
            if(operator.code == code) { return operator }
        }
        return null
    }
}

/** Response sent by Rocket in Pocket to a get all providers query */
interface GetProviderResponse {
    connection_provider: string,
    provider_code: string
}