
<!--
Copyright 2017-present Open Networking Foundation

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->


<div class="modal fade" ng-class="{in: vm.open}" tabindex="-1" role="dialog">
  <div class="modal-dialog modal-sm">
    <div class="modal-content">
      <div class="modal-header">
        <button ng-click="vm.close()"  type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
        <h4 class="modal-title">Manage subscriber:</h4>
      </div>
      <form name="vm.subscriber-detail">
        <div class="modal-body">
          <div class="row">
            <div class="col-xs-12">
              <label>Status</label>
            </div>
            <div class="col-xs-6">
              <a ng-click="vm.subscriber.features.status = 'enabled'"
                class="btn btn-block"
                ng-class="{'btn-primary': vm.subscriber.features.status === 'enabled' ,'btn-default': vm.subscriber.features.status !== 'enabled'}"
                >Enabled</a>
            </div>
            <div class="col-xs-6">
              <a ng-click="vm.subscriber.features.status = 'suspended'"
                class="btn btn-block"
                ng-class="{'btn-primary': vm.subscriber.features.status === 'suspended' ,'btn-default': vm.subscriber.features.status !== 'suspended'}"
                >Suspended</a>
            </div>
          </div>
          <div class="row">
            <div class="col-xs-6">
              <a ng-click="vm.subscriber.features.status = 'delinquent'"
                class="btn btn-block"
                ng-class="{'btn-primary': vm.subscriber.features.status === 'delinquent' ,'btn-default': vm.subscriber.features.status !== 'delinquent'}"
                >Delinquent <br> payment</a>
            </div>
            <div class="col-xs-6">
              <a ng-click="vm.subscriber.features.status = 'copyrightviolation'"
                class="btn btn-block"
                ng-class="{'btn-primary': vm.subscriber.features.status === 'copyrightviolation' ,'btn-default': vm.subscriber.features.status !== 'copyrightviolation'}"
                >Copyright <br> violation</a>
            </div>
          </div>
          <div class="row">
            <div class="col-xs-6">
              <label>Uplink Speed</label>
              <div class="input-group">
                <input type="number" class="form-control small-padding" ng-model="vm.subscriber.features.uplink_speed"/>
                <span class="input-group-addon">Mbps</span>
              </div>
            </div>
            <div class="col-xs-6">
              <label>Downlink Speed</label>
              <div class="input-group">
                <input type="number" class="form-control small-padding" ng-model="vm.subscriber.features.downlink_speed"/>
                <span class="input-group-addon">Mbps</span>
              </div>
            </div>
          </div>
          <div class="row">
            <div class="col-xs-6">
              <label>Enable Internet</label>
            </div>
            <div class="col-xs-6">
              <a 
                ng-click="vm.subscriber.features.uverse = !vm.subscriber.features.uverse"
                ng-class="{'btn-success': vm.subscriber.features.enable_uverse, 'btn-danger': !vm.subscriber.features.enable_uverse}"
                class="btn btn-block">
                <span ng-show="vm.subscriber.features.uverse === true">Enabled</span>
                <span ng-show="vm.subscriber.features.uverse !== true">Disabled</span>
              </a>
            </div>
          </div>
        </div>
        <div class="modal-footer" ng-show="vm.success || vm.formError">
          <div class="alert alert-success" ng-show="vm.success">
            {{vm.success}}
          </div>
          <div class="alert alert-danger" ng-show="vm.formError">
            {{vm.formError}}
          </div>
        </div>
        <div class="modal-footer">
          <button ng-click="vm.close()" type="button" class="btn btn-default" data-dismiss="modal">Close</button>
          <button ng-click="vm.updateSubscriber(vm.subscriber)" type="button" class="btn btn-primary">Save</button>
        </div>
      </form>
    </div><!-- /.modal-content -->
  </div><!-- /.modal-dialog -->
</div><!-- /.modal -->