<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you 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="box box-primary" ng-repeat="_site in Site.list">
	<div class="box-header">
		<h3 class="box-title">{{_site.name}}</h3>
		<div class="box-tools pull-right">
			<button class="btn btn-box-tool" data-widget="collapse">
				<i class="fa fa-minus"></i>
			</button>
			<button class="btn btn-box-tool" ng-click="showSiteEditor(_site)">
				<i class="fa fa-wrench"></i>
			</button>
		</div>
	</div><!-- /.box-header -->
	<div class="box-body">
		<div class="row">
			<div class="col-md-4" ng-repeat="dataSrc in _site.dataSrcList">
				<div class="info-box" ng-class="dataSrc.enabled !== false ? 'bg-aqua' : 'bg-gray'">
					<span class="info-box-icon"><i class="fa fa-suitcase"></i></span>
					<div class="info-box-content">
						<a class="fa fa-cog config pull-right" ng-click="showDataSourceEditor(dataSrc)"></a>
						<span class="info-box-text">{{dataSrc.desc || dataSrc.tags.dataSource}}</span>

						<span class="info-box-number" ng-show="dataSrc.hide"><small>-</small></span>
						<span class="info-box-number" ng-show="!dataSrc.hide">
							<span class="fa fa-refresh fa-spin" ng-hide="policyStatistic._promise.$$state.status === 1"></span>
							<span ng-show="policyStatistic._promise.$$state.status === 1">{{getPolicyCount(_site.name, dataSrc.tags.dataSource)}}</span>
							<small>Policies</small>
						</span>
						<div class="progress">
							<div class="progress-bar"></div>
						</div>
						<span class="progress-description" ng-show="dataSrc.hide"><small>-</small></span>
						<span class="progress-description" ng-show="!dataSrc.hide">
							<span class="fa fa-refresh fa-spin" ng-hide="alertStatistic._promise.$$state.status === 1"></span>
							<span ng-show="alertStatistic._promise.$$state.status === 1">{{getAlertCount(_site.name, dataSrc.tags.dataSource)}}</span>
							alerts in 30 Days
						</span>
					</div><!-- /.info-box-content -->
				</div>
			</div>
		</div>
	</div>
</div>

<!-- Modal: Create / Edit site -->
<div class="modal fade" id="siteMDL" tabindex="-1" role="dialog">
	<div class="modal-dialog" role="document">
		<div class="modal-content">
			<div class="modal-header">
				<button type="button" class="close" data-dismiss="modal" aria-label="Close">
					<span aria-hidden="true">&times;</span>
				</button>
				<h4 class="modal-title">{{!_siteEntity.srcSite ? 'Create' : 'Config'}} Site</h4>
			</div>
			<div class="modal-body">
				<div class="form-group">
					<label>* Site Name</label>
					<input type="text" class="form-control" placeholder="Site name..." ng-model="_siteEntity.name" ng-disabled="!!_siteEntity.srcSite" id="siteName">
				</div>

				<label>
					* Data Source
					<small class="text-muted">at least select 1 source</small>
				</label>
				<div class="checkbox" ng-repeat="item in _siteEntity.dataSrcList">
					<label>
						<input type="checkbox" value="{{item.name}}"
							   ng-checked="item.enabled"
							   ng-click="item.enabled = !item.enabled">
						{{item.name}}
					</label>
				</div>
			</div>
			<div class="modal-footer">
				<button type="button" class="btn btn-default" data-dismiss="modal">
					Close
				</button>
				<button type="button" class="btn btn-primary" ng-click="confirmUpateSite()"
						ng-disabled="!checkUpdateSite()">
					{{!_siteEntity.srcSite ? 'Create' : 'Update'}}
				</button>
			</div>
		</div>
	</div>
</div>

<!-- Modal: Edit data source -->
<div class="modal fade" id="dataSrcMDL" tabindex="-1" role="dialog">
	<div class="modal-dialog" role="document">
		<div class="modal-content">
			<div class="modal-header">
				<button type="button" class="close" data-dismiss="modal" aria-label="Close">
					<span aria-hidden="true">&times;</span>
				</button>
				<h4 class="modal-title">{{_dataSrcEntity.tags.dataSource}}</h4>
			</div>
			<div class="modal-body">
				<div class="checkbox">
					<label>
						<input type="checkbox"
							   ng-checked="_dataSrcEntity.enabled"
							   ng-click="_dataSrcEntity.enabled = !_dataSrcEntity.enabled">
						Enabled
					</label>
				</div>

				<div class="form-group">
					<label>Configuration</label>
					<textarea type="text" class="form-control" placeholder="Data source configuration..." ng-model="_dataSrcEntity.config" id="dataSrcConfig" rows="10"></textarea>
				</div>
			</div>
			<div class="modal-footer">
				<button type="button" class="btn btn-danger pull-left" ng-click="confirmDeleteDataSource()">
					Delete Source
				</button>

				<button type="button" class="btn btn-default" data-dismiss="modal">
					Close
				</button>
				<button type="button" class="btn btn-primary" ng-click="confirmUpateDataSource()" ng-disabled="_dataSrcEntityLock">
					Update
				</button>
			</div>
		</div>
	</div>
</div>