// SPDX-FileCopyrightText: 2021 Open Networking Foundation
//
// SPDX-License-Identifier: Apache-2.0

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

  import ietf-inet-types { prefix inet; }
  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 at:aether-identifier;
    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 at:aether-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 at:aether-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;
    }
  }
}
