module cord-subscriber {
  namespace "urn:onlab:cord:subscriber";
  prefix csub;
  yang-version 1.1;

  organization
   "Open Networking Lab (CORD) / Corenova Technologies";

  contact
    "Larry Peterson <llp@onlab.us>
     Peter K. Lee <peter@corenova.com>";
  
  description
   "This module contains CORD Subscriber model representing its
    relationship to features and services.

    Copyright (c) 2016 ON.LAB and the persons identified as authors of
    the code.  All rights reserved.

    Redistribution and use in source and binary forms, with or without
    modification, is permitted pursuant to, and subject to the license
    terms of the Apache License, Version 2.0 which accompanies this
    distribution, and is available at
    (http://www.apache.org/licenses/LICENSE-2.0).";
  
  revision 2016-07-14 {
    description "Initial revision.";
  }
  
  import xos-core        { prefix xos; }
  import cord-device     { prefix dev; }
  import ietf-yang-types { prefix yang; }
  import corenova-node   { prefix node; }

  identity cord-subscriber { base xos:subscriber; }

  grouping subscriber {
    uses xos:subscriber {
      refine kind { default cord-subscriber; }
    }
    leaf status {
      type enumeration {
        enum "enabled" {
          description "Enabled";
          value 1;
        }
        enum "suspended" {
          description "Suspended";
        }
        enum "delinquent" {
          description "Delinquent";
        }
        enum "violation" {
          description "Copyright Violation";
        }
      }
      default enabled;
    }
    leaf demo { type boolean; default false; }
    leaf uplink-speed {
      type dev:bandwidth;
      default 1000000000;      
    }
    leaf downlink-speed {
      type dev:bandwidth;
      default 1000000000;      
    }

    container services {
      description
        "Contains various services available to the subscriber";
      
      container cdn {
        leaf enabled { type boolean; default false; }
      }
      container firewall {
        leaf enabled { type boolean; default false; }
        leaf-list rules {
          // should qualify further
          type string;
        }
      }
      container url-filter {
        leaf enabled { type boolean; default false; }
        leaf level {
          type enumeration {
            enum "PG";
            // other types of level...
          }
        }
        leaf-list rules {
          // should qualify further
          type string;
        }
      }
      container uverse {
        leaf enabled { type boolean; default false; }
      }
    }

    list device {
      uses dev:device;
      key "mac";

      action create {
        input { uses dev:device; }
      }
      action update {
        input { uses dev:device; }
      }
      action delete;
    }
  }

  grouping subscriber-controller {
    uses subscriber;

    node:view "features identity related";

    container features {
      node:link cdn            { path "../services/cdn/enabled"; }
      node:link uplink-speed   { path "../uplink-speed"; }
      node:link downlink-speed { path "../downlink-speed"; }
      node:link uverse         { path "../services/uverse/enabled"; }
      node:link status         { path "../status"; }
      
      action update {
        description "when invoked, updates the features container (PUT)";
      }
    }
    
    container identity {
      node:link account-num { path "../service-specific-id"; }
      node:link name        { path "../name"; }
      
      action update {
        description "when invoked, updates the identity container (PUT)";
      }
    }

    container related {
      config false;
      description
        "placeholder where other services can augment for info they want to
         share (READ-ONLY)";
    }
  }
}
