// SPDX-FileCopyrightText: 2021 Open Networking Foundation
//
// SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0

submodule onf-site {
  belongs-to onf-enterprise { prefix ent; }

  import ietf-inet-types { prefix inet; }
  import ietf-yang-types{ prefix yg; }
  import onf-aether-types{ prefix at; }

  include onf-device;
  include onf-sim-card;
  include onf-upf;
  include onf-slice;
  include onf-device-group;
  include onf-ip-domain;

  organization "Open Networking Foundation.";
  contact "Scott Baker";
  description
    "An Aether site is a location where resources are deployed.";

  revision "2022-01-14" {
    description "Refactored as submodule";
    reference "RFC 6020";
  }

  revision "2021-09-10" {
    description "An Aether Site.";
    reference "RFC 6087";
  }

  typedef site-id {
        type yg:yang-identifier {
            length 1..32;
        }
    description "The typedef for site-id";
  }

  grouping site {
    description "The site grouping";

    list site {
      key "site-id";
      description
        "List of site";

      leaf site-id {
        type site-id;
        description "ID for this site.";
      }

      uses at:desc-display-name;

      list small-cell {
        key "small-cell-id";
        leaf small-cell-id {
          type yg:yang-identifier;
          description
            "Id of small cell";
        }

        uses at:desc-display-name;

        leaf address {
          type inet:host;
          description
            "Address of small cell";
        }
        leaf tac {
          type at:tac;
          mandatory true;
          description
              "Type Allocation Code";
        }
        leaf enable {
          type boolean;
          default true;
          description
            "Enable this small cell";
        }
        description
          "List of small cell addresses";
      }

      container monitoring {
        leaf edge-cluster-prometheus-url {
          type inet:uri;
          description
            "URL of edge cluster prometheus";
        }
        leaf edge-monitoring-prometheus-url {
          type inet:uri;
          description
            "URL of monitoring prometheus";
        }
        list edge-device {
          key "edge-device-id";
          leaf edge-device-id {
            type yg:yang-identifier;
            description
              "Id of edge monitoring device";
          }
          uses at:desc-display-name;

          description
            "List of edge monitoring devices";
        }
        description
            "container for monitoring";
      }

      container imsi-definition {
        leaf mcc {
          type at:mcc;
          mandatory true;
          description "mobile country code";
        }
        leaf mnc {
          type at:mnc;
          mandatory true;
          description "mobile network code";
        }
        leaf enterprise {
          type at:ent;
          mandatory true;
          description "enterprise-specific identifier";
        }
        leaf format {
          type string {
            length 15;
          }
          mandatory true;
          description "IMSI format specifier, describes how fields are packed into an IMSI. Must be exactly 15 characters long. For example, CCCNNNEEESSSSSS.";
          // Format specifiers:
          //   C = MCC
          //   N = MNC
          //   E = Enterprise
          //   0 = Forced Zero
          //   S = Subscriber ID
          // default is
          //   3 digit MCC
          //   3 digit MNC
          //   3 digit enterprise ID
          //   5 digit subscriber ID
        }
        description "container for imsi-defination";
      }

      uses device;

      uses sim-card;

      uses upf;

      uses slice;

      uses device-group;

      uses ip-domain;
    }
  }
}
