using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Ropin.Core.Common
{
    public class InfluxDBHelper
    {
        string _baseAddress = "http://localhost:8086"; //127.0.0.1
        string _username = "admin";
        string _password = "admin";


        /// <summary>
        /// 读
        /// </summary>
        /// <param name="database"></param>
        /// <param name="sql">
        /// sql = "CREATE DATABASE mydb";
        /// sql = "select * from test";
        /// </param>
        /// <returns></returns>
        public string Query(string database, string sql)
        {
            string pathAndQuery = string.Format("/query?db={0}&q={1}", database, sql);
            string url = _baseAddress + pathAndQuery;

            string result = HttpHelper.Get(url, _username, _password);
            return result;
        }




        /// <summary>
        /// 写
        /// </summary>
        /// <param name="database"></param>
        /// <param name="sql">
        /// string sql = "test,name=测试,count=1 value=10";
        /// 插入表test   索引name   列count,value
        /// </param>
        public string Write(string database, string sql)
        {
            string pathAndQuery = string.Format("/write?db={0}&precision=s", database);
            string url = _baseAddress + pathAndQuery;

            string result = HttpHelper.Post(url, sql, _username, _password);
            return result;
        }


    }
  //  public class InfluxDBClient
  //  {
  //      //声明InfluxDbClient
  //      private InfluxDbClient clientDb;

  //      public InfluxDBClient()
  //      {
  //          //连接InfluxDb的API地址、账号、密码
  //          var infuxUrl = "http://localhost:8086/";
  //          var infuxUser = "admin";
  //          var infuxPwd = "admin";

  //          //创建InfluxDbClient实例
  //          clientDb = new InfluxDbClient(infuxUrl, infuxUser, infuxPwd, InfluxDbVersion.Latest);
  //      }


  //      /// <summary>
  //      /// 从InfluxDB中读取数据
  //      /// </summary>
  //      public async void GetData()
  //      {
  //          //传入查询命令,支持多条
  //          var queries = new[]
  //          {
  //" SELECT * FROM Reading WHERE time> now() - 24h "
  //};
  //          var dbName = "code-hub";

  //          //从指定库中查询数据
  //          var response = await clientDb.Client.QueryAsync(queries, dbName);
  //          //得到Serie集合对象(返回执行多个查询的结果)
  //          var series = response.ToList();
  //          //取出第一条命令的查询结果,是一个集合
  //          var list = series[0].Values;
  //          //从集合中取出第一条数据
  //          var info_model = list.FirstOrDefault();
  //      }



  //      /// <summary>
  //      /// 往InfluxDB中写入数据
  //      /// </summary>
  //      public async void AddData()
  //      {
  //          //基于InfluxData.Net.InfluxDb.Models.Point实体准备数据
  //          var point_model = new Point()
  //          {
  //              Name = "Reading",//表名
  //              Tags = new Dictionary<string, object>()
  //{
  // { "Id", 158}
  //},
  //              Fields = new Dictionary<string, object>()
  //{
  // { "Val", "webInfo" }
  //},
  //              Timestamp = DateTime.UtcNow
  //          };
  //          var dbName = "code-hub";

  //          //从指定库中写入数据,支持传入多个对象的集合
  //          var response = await clientDb.Client.WriteAsync(point_model, dbName);
  //      }

  //  }
    public static class InfluxDBExpress
    {
        /// <summary>
        /// 将当前时间转换成unix时间戳形式
        /// </summary>
        /// <param name="datetime"></param>
        /// <returns></returns>
        public static long ToUnixTimestamp(this DateTime datetime)
        {
            return (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
        }
    }
}