<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta
      name="viewport"
      content="initial-scale=1.0, user-scalable=no, width=device-width"
    />
    <title>热力图</title>

    <script src="./static/tailwind.min.js"></script>
    <link href="./static/remixicon/remixicon.css" rel="stylesheet" />

    <style>
      html,
      body,
      #container {
        margin: 0;
        padding: 0;
        width: 100%;
        height: 100%;
      }
    </style>
  </head>

  <body>
    <div id="container"></div>

    <button
      id="toggle-chart-btn"
      class="h-7 w-7 rounded-full border shadow-xl transition-all hover:bg-slate-200 mb-6 mx-1 fixed right-2 top-2 bg-white"
      onclick="toggleChart()"
    >
      <i class="ri-bar-chart-line"></i>
    </button>
    <div
      id="chart-box"
      class="rounded-2xl shadow-2xl transition-all border fixed top-10 right-2 p-4 backdrop-blur-xl bg-white bg-opacity-70"
    >
      <div id="linegraph" class="w-96 h-64"></div>
    </div>

    <div
      id="control-box"
      class="fixed border rounded-2xl shadow-xl bottom-4 left-4 right-4 backdrop-blur-xl bg-white bg-opacity-70"
    >
      <span id="hint">双击区域即可编辑,或点击 New 创建新区域</span>
      <div class="flex flex-row flex-nowrap items-center p-4">
        <button
          class="rounded-xl transition-all hover:bg-slate-200 p-2 mb-6 mx-1"
          onclick="createPolygon()"
        >
          New
        </button>
        <!-- <button
          class="rounded-xl transition-all hover:bg-slate-200 p-2 mb-6 mx-1"
          onclick="startEdit()"
        >
          Edit
        </button> -->
        <button
          class="rounded-xl transition-all hover:bg-slate-200 p-2 mb-6 mx-1"
          onclick="stopEdit()"
        >
          Stop
        </button>

        <button
          class="h-7 w-7 rounded-full transition-all hover:bg-slate-200 mb-6 mx-1"
          id="toggle-play-btn"
          onclick="togglePlay()"
        >
          <i class="ri-play-line"></i>
        </button>
        <div class="grow relative mb-6 mx-1">
          <input
            type="range"
            min="0"
            max="23"
            value="0"
            id="control-bar"
            class="h-2 w-full cursor-pointer appearance-none rounded-lg bg-gray-200"
            oninput="updateData(this.value)"
          />
          <div
            class="-bottom-6 flex w-full flex-nowrap justify-between px-2 text-sm text-gray-500"
          >
            <span class="relative">
              <span class="absolute left-1/2 -translate-x-1/2">0</span></span
            >
            <span class="relative">
              <span class="absolute left-1/2 -translate-x-1/2">1</span></span
            >
            <span class="relative">
              <span class="absolute left-1/2 -translate-x-1/2">2</span></span
            >
            <span class="relative">
              <span class="absolute left-1/2 -translate-x-1/2">3</span></span
            >
            <span class="relative">
              <span class="absolute left-1/2 -translate-x-1/2">4</span></span
            >
            <span class="relative">
              <span class="absolute left-1/2 -translate-x-1/2">5</span></span
            >
            <span class="relative">
              <span class="absolute left-1/2 -translate-x-1/2">6</span></span
            >
            <span class="relative">
              <span class="absolute left-1/2 -translate-x-1/2">7</span></span
            >
            <span class="relative">
              <span class="absolute left-1/2 -translate-x-1/2">8</span></span
            >
            <span class="relative">
              <span class="absolute left-1/2 -translate-x-1/2">9</span></span
            >
            <span class="relative">
              <span class="absolute left-1/2 -translate-x-1/2">10</span></span
            >
            <span class="relative">
              <span class="absolute left-1/2 -translate-x-1/2">11</span></span
            >
            <span class="relative">
              <span class="absolute left-1/2 -translate-x-1/2">12</span></span
            >
            <span class="relative">
              <span class="absolute left-1/2 -translate-x-1/2">13</span></span
            >
            <span class="relative">
              <span class="absolute left-1/2 -translate-x-1/2">14</span></span
            >
            <span class="relative">
              <span class="absolute left-1/2 -translate-x-1/2">15</span></span
            >
            <span class="relative">
              <span class="absolute left-1/2 -translate-x-1/2">16</span></span
            >
            <span class="relative">
              <span class="absolute left-1/2 -translate-x-1/2">17</span></span
            >
            <span class="relative">
              <span class="absolute left-1/2 -translate-x-1/2">18</span></span
            >
            <span class="relative">
              <span class="absolute left-1/2 -translate-x-1/2">19</span></span
            >
            <span class="relative">
              <span class="absolute left-1/2 -translate-x-1/2">20</span></span
            >
            <span class="relative">
              <span class="absolute left-1/2 -translate-x-1/2">21</span></span
            >
            <span class="relative">
              <span class="absolute left-1/2 -translate-x-1/2">22</span></span
            >
            <span class="relative">
              <span class="absolute left-1/2 -translate-x-1/2">23</span></span
            >
          </div>
        </div>
      </div>
    </div>

    <script type="text/javascript" src="./static/echarts.min.js"></script>
    <script type="text/javascript" src="./heatmapData.js"></script>
    <script type="text/javascript" src="./data.js"></script>

    <script type="text/javascript">
      window._AMapSecurityConfig = {
        securityJsCode: data.gaode.securityJsCode,
      };
    </script>
    <script src="https://webapi.amap.com/maps?v=2.0&key=13471667a960ce7a08b3dfdd9a4fb193&plugin=AMap.PolygonEditor"></script>
    <script src="https://a.amap.com/jsapi_demos/static/demo-center/js/demoutils.js"></script>

    <script>
      var chartEle = document.getElementById("linegraph");
      var chart = echarts.init(chartEle, null, {
        renderer: "canvas",
        useDirtyRect: false,
      });
      var app = {};
      var option = {
        title: {
          text: "Distribution of Water",
        },
        tooltip: {
          trigger: "axis",
          axisPointer: {
            type: "cross",
          },
        },
        xAxis: {
          type: "category",
          boundaryGap: false,
          data: data.chart.xAxis,
        },
        yAxis: {
          type: "value",
          axisLabel: {
            formatter: "{value} T",
          },
          axisPointer: {
            snap: true,
          },
        },
        visualMap: {
          show: false,
          dimension: 0,
          pieces: [{ gt: 0, lte: 24, color: "green" }],
          padding: 0,
        },
        series: [
          {
            name: "Water",
            type: "line",
            smooth: true,
            data: data.chart.series,
            markArea: {
              itemStyle: { color: "rgba(255, 173, 177, 0.4)" },
              data: [[{ name: "Now", xAxis: "0" }, { xAxis: "1" }]],
            },
          },
        ],
        grid: {
          left: "15%",
          right: 10,
          bottom: "10%",
        },
      };
      chart.setOption(option);

      var map = new AMap.Map("container", {
        resizeEnable: true,
        center: data.center,
        zoom: data.zoom,
      });

      // heatmap.js document:
      // http://www.patrick-wied.at/static/heatmapjs/docs.html
      var heatmap;
      var playing = false;
      map.plugin(["AMap.HeatMap"], function () {
        heatmap = new AMap.HeatMap(map, {
          radius: 25, // 每个点的半径大小
          opacity: [0, 0.8],
          gradient: {
            0.1: "rgb(255, 255, 255)",
            0.2: "rgb(225, 225, 255)",
            0.3: "rgb(195, 195, 255)",
            0.4: "rgb(175, 175, 255)",
            0.5: "rgb(155, 155, 255)",
            0.6: "rgb(135, 135, 255)",
            0.7: "rgb(115, 115, 255)",
            0.8: "rgb( 95,  95, 255)",
            0.9: "rgb( 75,  75, 255)",
            1.0: "rgb( 55,  55, 255)",
          },
        });
        heatmap.setDataSet({
          max: 1000,
          data: heatmapData[0],
        });
      });

      function showHeatmap() {
        heatmap.show();
      }

      function hideHeatmap() {
        heatmap.hide();
      }

      function updateData(value) {
        option.series[0].markArea.data = [
          [
            {
              name: "Now",
              xAxis: value.toString(),
            },
            {
              xAxis: (parseInt(value) + 1).toString(),
            },
          ],
        ];
        chart.setOption(option);

        heatmap.setDataSet({
          data: heatmapData[value],
          max: 1000,
        });
      }

      function togglePlay() {
        let btn = document.getElementById("toggle-play-btn");
        if (playing) {
          playing = false;
          btn.innerHTML = '<i class="ri-play-line"></i>';
          stopPlay();
        } else {
          playing = true;
          btn.innerHTML = '<i class="ri-pause-line"></i>';
          startPlay();
        }
      }

      function startPlay() {
        let slider = document.getElementById("control-bar");
        intervalID = setInterval(function () {
          if (slider.value < 23) {
            slider.value++;
          } else {
            slider.value = 0;
          }
          updateData(slider.value);
        }, 100); // Do every 100ms
      }

      function stopPlay() {
        clearInterval(intervalID);
      }

      var temp;
      function toggleChart() {
        let chartBox = document.getElementById("chart-box");
        if (chartBox.style.display !== "none") {
          temp = chartBox.style.display;
          chartBox.style.display = "none";
        } else {
          chartBox.style.display = temp;
        }
      }

      var path1 = [
        [112.964433, 28.22664],
        [112.956805, 28.191032],
        [112.950826, 28.118326],
        [112.941137, 28.103233],
        [112.93098, 28.109704],
        [112.899239, 28.11641],
        [112.879673, 28.149904],
        [112.886771, 28.170875],
        [112.862953, 28.188488],
        [112.85079, 28.223915],
        [112.852851, 28.234087],
        [112.88032, 28.225005],
      ];
      var path2 = [
        [112.975993, 28.226261],
        [112.969743, 28.205509],
        [112.967603, 28.184652],
        [112.960208, 28.139103],
        [113.014548, 28.151931],
        [113.019324, 28.195638],
        [113.018336, 28.23149],
      ];
      var polygon1 = new AMap.Polygon({
        path: path1,
      });
      var polygon2 = new AMap.Polygon({
        path: path2,
      });

      map.add([polygon1, polygon2]);
      map.setFitView();
      var polyEditor = new AMap.PolygonEditor(map);

      polyEditor.addAdsorbPolygons([polygon1, polygon2]);
      polyEditor.on("add", function (data) {
        console.log(data);
        var polygon = data.target;
        polyEditor.addAdsorbPolygons(polygon);
        polygon.on("dblclick", () => {
          polyEditor.setTarget(polygon);
          polyEditor.open();
          hint.innerText = "正在编辑区域,点击 Stop 退出编辑";
        });
      });

      polygon1.on("dblclick", () => {
        polyEditor.setTarget(polygon1);
        polyEditor.open();
        hint.innerText = "正在编辑区域,点击 Stop 退出编辑";
      });
      polygon2.on("dblclick", () => {
        polyEditor.setTarget(polygon2);
        polyEditor.open();
        hint.innerText = "正在编辑区域,点击 Stop 退出编辑";
      });
      function createPolygon() {
        polyEditor.close();
        polyEditor.setTarget();
        polyEditor.open();

        var hint = document.getElementById("hint");
        hint.innerText = "正在创建一个新区域,右键完成,点击 Stop 退出编辑";
      }

      function startEdit() {
        polyEditor.open();
        hint.innerText = "正在编辑区域,点击 Stop 退出编辑";
      }

      function stopEdit() {
        polyEditor.close();
        hint.innerText = "双击区域即可编辑,或点击 New 创建新区域";
      }
    </script>
  </body>
</html>