/**
 * @flow
 * AndroidParameters representation wrapper
 */
import type DynamicLink from './DynamicLink';
import type { NativeAndroidParameters } from './types';

export default class AndroidParameters {
  _fallbackUrl: string | void;
  _link: DynamicLink;
  _minimumVersion: number | void;
  _packageName: string | void;

  constructor(link: DynamicLink) {
    this._link = link;
  }

  /**
   *
   * @param fallbackUrl
   * @returns {DynamicLink}
   */
  setFallbackUrl(fallbackUrl: string): DynamicLink {
    this._fallbackUrl = fallbackUrl;
    return this._link;
  }

  /**
   *
   * @param minimumVersion
   * @returns {DynamicLink}
   */
  setMinimumVersion(minimumVersion: number): DynamicLink {
    this._minimumVersion = minimumVersion;
    return this._link;
  }

  /**
   *
   * @param packageName
   * @returns {DynamicLink}
   */
  setPackageName(packageName: string): DynamicLink {
    this._packageName = packageName;
    return this._link;
  }

  build(): NativeAndroidParameters {
    if ((this._fallbackUrl || this._minimumVersion) && !this._packageName) {
      throw new Error(
        'AndroidParameters: Missing required `packageName` property'
      );
    }
    return {
      fallbackUrl: this._fallbackUrl,
      minimumVersion: this._minimumVersion,
      packageName: this._packageName,
    };
  }
}
