
/*
 * 
 *   Copyright 2016 RIFT.IO Inc
 *
 *   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.
 *
 */

var React = require('react');
//var Histogram = require('react-d3-histogram')
export default {
  //test: require('./test/test.js'),
  button: require('./button/rw.button.js'),
  React: React,
//  Histogram: Histogram,
  Multicomponent: require('./multicomponent/multicomponent.js'),
  Mixins: require('./mixins/ButtonEventListener.js'),
  // Gauge: require('./gauge/gauge.js'),
  Bullet: require('./bullet/bullet.js')
};

// require('../../assets/js/n3-line-chart.js');
// var Gauge = require('../../assets/js/gauge-modified.js');
// var bulletController = function($scope, $element) {
//     this.$element = $element;
//     this.vertical = false;
//     this.value = 0;
//     this.min = 0;
//     this.max = 100;
//     //this.range = this.max - this.min;
//     //this.percent = (this.value - this.min) / this.range;
//     this.displayValue = this.value;
//     this.isPercent = (this.units == '')? true:false;
//     this.bulletColor = "#6BB814";
//     this.fontsize = 28;
//     this.radius = 4;
//     this.containerMarginX = 0;
//     this.containerMarginY = 0;
//     this.textMarginX = 5;
//     this.textMarginY = 42;
//     this.bulletMargin = 0;
//     this.width = 512;
//     this.height = 64;
//     this.markerX = -100; // puts it off screen unless set
//     var self = this;
//     if (this.isPercent) {
//         this.displayValue + "%";
//     }
//     $scope.$watch(
//       function() {
//         return self.value;
//       },
//       function() {
//         self.valueChanged();
//       }
//     );

//   }

//   bulletController.prototype = {

//     valueChanged: function() {
//       var range = this.max - this.min;
//       var normalizedValue = (this.value - this.min) / range;
//       if (this.isPercent) {
//         this.displayValue = String(Math.round(normalizedValue * 100)) + "%";
//       } else {
//         this.displayValue = this.value;
//       }
//       // All versions of IE as of Jan 2015 does not support inline CSS transforms on SVG
//       if (platform.name == 'IE') {
//         this.bulletWidth = Math.round(100 * normalizedValue) + '%';
//       } else {
//         this.bulletWidth = this.width - (2 * this.containerMarginX);
//         var transform = 'scaleX(' + normalizedValue + ')';
//         var bullet = $(this.$element).find('.bullet2');
//         bullet.css('transform', transform);
//         bullet.css('-webkit-transform', transform);
//       }
//     },

//     markerChanged: function() {
//       var range = this.max - this.min;
//       var w = this.width - (2 * this.containerMarginX);
//       this.markerX = this.containerMarginX + ((this.marker - this.min) / range ) * w;
//       this.markerY1 = 7;
//       this.markerY2 = this.width - 7;
//     }
//   }

// angular.module('components', ['n3-line-chart'])
//     .directive('rwBullet', function() {
//       return {
//         restrict : 'E',
//         templateUrl: 'modules/views/rw.bullet.tmpl.html',
//         bindToController: true,
//         controllerAs: 'bullet',
//         controller: bulletController,
//         replace: true,
//         scope: {
//           min : '@?',
//           max : '@?',
//           value : '@',
//           marker: '@?',
//           units: '@?',
//           bulletColor: '@?',
//           label: '@?'
//         }
//       };
//     })
//     .directive('rwSlider', function() {
//       var controller = function($scope, $element, $timeout) {
//         // Q: is there a way to force attributes to be ints?
//         $scope.min = $scope.min || "0";
//         $scope.max = $scope.max || "100";
//         $scope.step = $scope.step || "1";
//         $scope.height = $scope.height || "30";
//         $scope.orientation = $scope.orientation || 'horizontal';
//         $scope.tooltipInvert = $scope.tooltipInvert || false;
//         $scope.percent = $scope.percent || false;
//         $scope.kvalue = $scope.kvalue || false;
//         $scope.direction = $scope.direction || "ltr";
//         $($element).noUiSlider({
//           start: parseInt($scope.value),
//           step: parseInt($scope.step),
//           orientation: $scope.orientation,
//           range: {
//             min: parseInt($scope.min),
//             max: parseInt($scope.max)
//           },
//           direction: $scope.direction
//         });
//         //$(".no-Ui-target").Link('upper').to('-inline-<div class="tooltip"></div>')
//         var onSlide = function(e, value) {
//           $timeout(function(){
//             $scope.value = value;
//           })

//         };
//         $($element).on({
//           change: onSlide,
//           slide: onSlide,
//           set: $scope.onSet({value: $scope.value})
//         });
//         var val = String(Math.round($scope.value));
//         if ($scope.percent) {
//             val += "%"
//         } else if ($scope.kvalue) {
//             val += "k"
//         }
//         $($element).height($scope.height);
//         if ($scope.tooltipInvert) {
//             $($element).find('.noUi-handle').append("<div class='tooltip' style='position:relative;right:20px'>" + val + "</div>");
//         } else {
//             $($element).find('.noUi-handle').append("<div class='tooltip' style='position:relative;left:-20px'>" + val + "</div>");
//         }
//         $scope.$watch('value', function(value) {
//         var val = String(Math.round($scope.value));
//         if ($scope.percent) {
//             val += "%"
//         } else if($scope.kvalue) {
//             val += "k"
//         }
//           $($element).val(value);
//           $($element).find('.tooltip').html(val);
//         if ($scope.tooltipInvert) {
//             $($element).find('.tooltip').css('right', $($element).find('.tooltip').innerWidth() * -1);
//         } else {
//             $($element).find('.tooltip').css('left', $($element).find('.tooltip').innerWidth() * -1);
//         }
//         });
//       };

//       return {
//         restrict : 'E',
//         template: '<div></div>',
//         controller : controller,
//         replace: true,
//         scope: {
//           min : '@',
//           max : '@',
//           width: '@',
//           height: '@',
//           step : '@',
//           orientation : '@',
//           tooltipInvert: '@',
//           percent: '@',
//           kvalue: '@?',
//           onSet:'&?',
//           direction: '@?',
//           value:'=?'
//         }
//       };
//     })
// .directive('rwGauge', function() {
//     return {
//         restrict: 'AE',
//         template: '<canvas class="rwgauge" style="width:100%;height:100%;max-width:{{width}}px;max-height:240px;"></canvas>',
//         replace: true,
//         scope: {
//             min: '@?',
//             max: '@?',
//             size: '@?',
//             color: '@?',
//             value: '@?',
//             resize: '@?',
//             isAggregate: '@?',
//             units: '@?',
//             valueFormat: '=?',
//             width: '@?'
//         },
//         bindToController: true,
//         controllerAs: 'gauge',
//         controller: function($scope, $element) {
//             var self = this;
//             this.gauge = null;
//             this.min = this.min || 0;
//             this.max = this.max || 100;
//             this.nSteps = 14;
//             this.size = this.size || 300;
//             this.units = this.units || '';
//             $scope.width = this.width || 240;
//             this.color = this.color || 'hsla(212, 57%, 50%, 1)';
//             if (!this.valueFormat) {
//                 if (this.max > 1000 || this.value) {
//                     self.valueFormat = {
//                         "int": 1,
//                         "dec": 0
//                     };
//                 } else {
//                     self.valueFormat = {
//                         "int": 1,
//                         "dec": 2
//                     };
//                 }
//             }
//             this.isAggregate = this.isAggregate || false;
//             this.resize = this.resize || false;
//             if (this.format == 'percent') {
//                 self.valueFormat = {
//                     "int": 3,
//                     "dec": 0
//                 };
//             }
//             $scope.$watch(function() {
//                 return self.max;
//             }, function(n, o) {
//                 if(n !== o) {
//                     renderGauge();
//                 }
//             });
//             $scope.$watch(function() {
//                 return self.valueFormat;
//             }, function(n, o) {
//                 if(n != 0) {
//                     renderGauge();
//                 }
//             });
//             $scope.$watch(function() {
//                 return self.value;
//             }, function() {
//                 if (self.gauge) {
//                     // w/o rounding gauge will unexplainably thrash round.
//                     self.valueFormat = determineValueFormat(self.value);
//                     self.gauge.setValue(Math.ceil(self.value * 100) / 100);
//                     //self.gauge.setValue(Math.round(self.value));
//                 }
//             });
//             angular.element($element).ready(function() {
//                 console.log('rendering')
//                 renderGauge();
//             })
//             window.testme = renderGauge;
//             function determineValueFormat(value) {

//                     if (value > 999 || self.units == "%") {
//                         return {
//                             "int": 1,
//                             "dec": 0
//                         }
//                     }

//                     return {
//                         "int": 1,
//                         "dec": 2
//                     }
//                 }
//             function renderGauge(calcWidth) {
//                 if (self.max == self.min) {
//                     self.max = 14;
//                 }
//                 var range = self.max - self.min;
//                 var step = Math.round(range / self.nSteps);
//                 var majorTicks = [];
//                 for (var i = 0; i <= self.nSteps; i++) {
//                     majorTicks.push(self.min + (i * step));
//                 };
//                 var redLine = self.min + (range * 0.9);
//                 var config = {
//                     isAggregate: self.isAggregate,
//                     renderTo: angular.element($element)[0],
//                     width: calcWidth || self.size,
//                     height: calcWidth || self.size,
//                     glow: false,
//                     units: self.units,
//                     title: false,
//                     minValue: self.min,
//                     maxValue: self.max,
//                     majorTicks: majorTicks,
//                     valueFormat: determineValueFormat(self.value),
//                     minorTicks: 0,
//                     strokeTicks: false,
//                     highlights: [],
//                     colors: {
//                         plate: 'rgba(0,0,0,0)',
//                         majorTicks: 'rgba(15, 123, 182, .84)',
//                         minorTicks: '#ccc',
//                         title: 'rgba(50,50,50,100)',
//                         units: 'rgba(50,50,50,100)',
//                         numbers: '#fff',
//                         needle: {
//                             start: 'rgba(255, 255, 255, 1)',
//                             end: 'rgba(255, 255, 255, 1)'
//                         }
//                     }
//                 };
//                 var min = config.minValue;
//                 var max = config.maxValue;
//                 var N = 1000;
//                 var increment = (max - min) / N;
//                 for (i = 0; i < N; i++) {
//                     var temp_color = 'rgb(0, 172, 238)';
//                     if (i > 0.5714 * N && i <= 0.6428 * N) {
//                         temp_color = 'rgb(0,157,217)';
//                     } else if (i >= 0.6428 * N && i < 0.7142 * N) {
//                         temp_color = 'rgb(0,142,196)';
//                     } else if (i >= 0.7142 * N && i < 0.7857 * N) {
//                         temp_color = 'rgb(0,126,175)';
//                     } else if (i >= 0.7857 * N && i < 0.8571 * N) {
//                         temp_color = 'rgb(0,122,154)';
//                     } else if (i >= 0.8571 * N && i < 0.9285 * N) {
//                         temp_color = 'rgb(0,96,133)';
//                     } else if (i >= 0.9285 * N) {
//                         temp_color = 'rgb(0,80,112)';
//                     }
//                     config.highlights.push({
//                         from: i * increment,
//                         to: increment * (i + 2),
//                         color: temp_color
//                     })
//                 }
//                 var updateSize = _.debounce(function() {
//                     config.maxValue = self.max;
//                     var clientWidth = self.parentNode.parentNode.clientWidth / 2;
//                     var calcWidth = (300 > clientWidth) ? clientWidth : 300;
//                     self.gauge.config.width = self.gauge.config.height = calcWidth;
//                     self.renderGauge(calcWidth);
//                 }, 500);
//                 if (self.resize) $(window).resize(updateSize)
//                 if (self.gauge) {
//                     self.gauge.updateConfig(config);
//                 } else {
//                     self.gauge = new Gauge(config);
//                     self.gauge.draw();
//                 }
//             };
//         },
//     }
// });
