# Source: src/main/js/daemon/model/MoneroNetworkType.js

    const MoneroError = require("../../common/MoneroError");

    /**
     * Defines the Monero network types (mainnet, testnet, and stagenet).
     *
     * @hideconstructor
     */
    class MoneroNetworkType {

      /**
       * Validates the given network type.
       *
       * @param {int} networkType - the network type to validate as a numeric
       */
      static validate(networkType) {
        if (networkType !== 0 && networkType !== 1 && networkType !== 2) throw new MoneroError("Network type is invalid: " + networkType);
      }

      /**
       * Indicates if the given network type is valid or not.
       *
       * @param {int} networkType - the network type to validate as a numeric
       * @return {boolean} true if the network type is valid, false otherwise
       */
      static isValid(networkType) {
        return networkType === 0 || networkType === 1 || networkType === 2;
      }

      /**
       * Parse the given string as a network type.
       *
       * @param {string} networkTypeStr - "mainnet", "testnet", or "stagenet" (case insensitive)
       * @return {int} the network type as a numeric
       */
      static parse(networkTypeStr) {
        let str = ("" + networkTypeStr).toLowerCase();
        switch (str) {
          case "mainnet": return MoneroNetworkType.MAINNET;
          case "testnet": return MoneroNetworkType.TESTNET;
          case "stagenet": return MoneroNetworkType.STAGENET;
          default: throw new MoneroError("Invalid network type to parse: '" + networkTypeStr + "'");
        }
      }

      /**
       * Get the network type in human-readable form.
       *
       * @return {string} the network type in human-readable form
       */
      static toString(networkType) {
        if (networkType === 0) return "mainnet";
        if (networkType === 1) return "testnet";
        if (networkType === 2) return "stagenet";
        throw new MoneroError("Invalid network type: " + networkType);
      }
    }

    /**
     * Mainnet (value=0).
     */
    MoneroNetworkType.MAINNET = 0;

    /**
     * Testnet (value=1).
     */
    MoneroNetworkType.TESTNET = 1;

    /**
     * Stagnet (value=2).
     */
    MoneroNetworkType.STAGENET = 2;

    module.exports = MoneroNetworkType;