module openconfig-optical-amplifier {

  yang-version "1";

  // namespace
  namespace "http://openconfig.net/yang/optical-amplfier";

  prefix "oc-opt-amp";

  import openconfig-transport-line-common {
    prefix oc-line-com;
    revision-date "2016-03-31";
  }
  import openconfig-extensions {
    prefix oc-ext;
    revision-date "2015-10-09";
  }

    // import tailf-common {prefix "tailf";}
    // tailf:export netconf;
    // tailf:export rest;

  // meta
  organization "OpenConfig working group";

  contact
    "OpenConfig working group
    www.openconfig.net";

  description
    "This model describes configuration and operational state data
    for optical amplifiers, deployed as part of a transport
    line system.";

  oc-ext:openconfig-version "0.1.0";

  revision "2016-03-31" {
    description
      "Initial public release";
    reference "0.1.0";
  }

  revision "2015-12-11" {
    description
      "Initial revision";
    reference "TBD";
  }

  // extension statements

  // feature statements

  // identity statements

  identity OPTICAL_AMPLIFIER_TYPE {
    description
      "Type definition for different types of optical amplifiers";
  }

  identity EDFA {
    base OPTICAL_AMPLIFIER_TYPE;
    description
      "Erbium doped fiber amplifer (EDFA)";
  }

  identity FORWARD_RAMAN {
    base OPTICAL_AMPLIFIER_TYPE;
    description
      "Forward pumping Raman amplifier";
  }

  identity BACKWARD_RAMAN {
    base OPTICAL_AMPLIFIER_TYPE;
    description
      "Backward pumping Raman amplifier";
  }

  identity HYBRID {
    base OPTICAL_AMPLIFIER_TYPE;
    description
      "Hybrid backward pumping Raman + EDFA amplifier";
  }

  identity GAIN_RANGE {
    description
      "Base type for expressing the gain range for a switched gain
      amplifier.  The gain range is expressed as a generic setting,
      e.g., LOW/MID/HIGH. The actual db range will be determined
      by the implementation.";
  }

  identity LOW_GAIN_RANGE {
    base GAIN_RANGE;
    description
      "LOW gain range setting";
  }

  identity MID_GAIN_RANGE {
    base GAIN_RANGE;
    description
      "MID gain range setting";
  }

  identity HIGH_GAIN_RANGE {
    base GAIN_RANGE;
    description
      "HIGH gain range setting";
  }

  identity FIXED_GAIN_RANGE {
    base GAIN_RANGE;
    description
      "Fixed or non-switched gain amplfier";
  }

  identity OPTICAL_AMPLIFIER_MODE {
    description
      "Type definition for different types of optical amplifier
      operating modes";
  }

  identity CONSTANT_POWER {
      base OPTICAL_AMPLIFIER_MODE;
      description
        "Constant power mode";
  }

  identity CONSTANT_GAIN {
      base OPTICAL_AMPLIFIER_MODE;
      description
        "Constant gain mode";
  }


  // grouping statements

  grouping optical-amplifier-config {
    description
      "Configuration data for optical amplifiers";

    leaf name {
      type string;
      description
        "User-defined name assigned to identify a specific amplifier
        in the device";
    }

    leaf type {
      type identityref {
        base OPTICAL_AMPLIFIER_TYPE;
      }
      description
        "Type of the amplifier";
    }

    leaf target-gain {
      type decimal64 {
        fraction-digits 2;
        range 0..max;
      }
      units dB;
      description
        "Positive gain applied by the amplifier.";
    }

    leaf target-gain-tilt {
      type decimal64 {
        fraction-digits 2;
      }
      units dB;
      description
        "Gain tilt control";
    }

    leaf gain-range {
      type identityref {
        base GAIN_RANGE;
      }
      description
        "Selected gain range.  The gain range is a platform-defined
        value indicating the switched gain amplifier setting";
    }

    leaf amp-mode {
      type identityref {
        base OPTICAL_AMPLIFIER_MODE;
      }
      description
        "The operating mode of the amplifier";
    }

    leaf output-power {
      type decimal64 {
        fraction-digits 2;
      }
      units dBm;
      description
        "Output optical power of the amplifier.";
    }

  }

  grouping optical-amplifier-state {
    description
      "Operational state data for optical amplifiers";

    leaf actual-gain {
      type decimal64 {
        fraction-digits 2;
        range 0..max;
      }
      units dB;
      description
        "Actual gain applied by the amplifier.";
    }

    leaf actual-gain-tilt {
      type decimal64 {
        fraction-digits 2;
      }
      units dB;
      description
        "The actual gain tilt.";
    }

    leaf input-power {
      type decimal64 {
        fraction-digits 2;
      }
      units dBm;
      description
        "Input optical power of the amplifier.";
    }
  }

  grouping optical-amplifier-top {
    description
      "Top-level grouping for optical amplifier data";

    container optical-amplifiers {
      description
        "Enclosing container for list of amplifiers";

      list amplifier {
        key "name";
        description
          "List of optical amplifiers present in the device";

        leaf name {
          type leafref {
            path "../config/name";
          }
          description
            "Reference to the name of the amplifier";
        }

        container config {
          description
            "Configuration data for the amplifier";

          uses optical-amplifier-config;
        }

        container state {

          config false;

          description
            "Operational state data for the amplifier";

          uses optical-amplifier-config;
          uses optical-amplifier-state;
        }
      }

      uses oc-line-com:optical-osc-top;
    }
  }

  // data definition statements

  uses optical-amplifier-top;


}
