window.onload = () => {
  let raster = new Cesium.ArcGisMapServerImageryProvider({
    url: 'https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer',
  });

  const viewer = new Cesium.Viewer('cesiumContainer', {
    animation: false,
    shouldAnimate: true,
    geocoder: false,
    homeButton: false,
    infoBox: false,
    fullscreenButton: false,
    sceneModePicker: false,
    selectionIndicator: false,
    timeline: false,
    navigationHelpButton: false,
    baseLayerPicker: false,
    imageryProvider: raster,
    contextOptions: {
      requestWebgl2: true,
    },
  });

  viewer.scene.postProcessStages.fxaa.enabled = true;
  viewer.scene.camera.setView({
    destination: Cesium.Cartesian3.fromDegrees(107.857, 35.594498, 10000),
  });
  //   let scene = viewer.scene;
  //   viewer.scene.debugShowFramesPerSecond = true;

  //   viewer.camera.flyTo({
  //     destination: new Cesium.Cartesian3(-2480561.3182985717, 4681691.324170088, 3539464.2534263907),
  //     orientation: {
  //       heading: 2.0002851646951996,
  //       pitch: -0.25963088874216256,
  //       roll: 6.283183024299778,
  //     },
  //     complete: function () {
  //       console.error('fly complete');
  //     },
  //   });

  //   // let geometry = new CesiumPlot.Polygon(Cesium, viewer);
  //   let geometry = new CesiumPlot.FineArrow(Cesium, viewer, {
  //     material: Cesium.Color.fromCssColorString('rgba(255, 178, 208, 0.5)'),
  //     outlineMaterial: Cesium.Color.fromCssColorString('rgba(59, 178, 208, 1)'),
  //     outlineWidth: 3,
  //   });
  let geometry;
  const dragStartHandler = () => {
    console.error('start');
  };
  const drawUpdateHandler = (cartesian) => {
    console.error('update', cartesian);
  };

  const drawEndHandler = (geometryPoints) => {
    console.error('drawEnd', geometryPoints);
  };

  const editStartHandler = () => {
    console.error('editStart');
  };

  const editEndHandler = (geometryPoints) => {
    console.error('editEnd', geometryPoints);
  };
  const buttonGroup = document.getElementById('button-group');
  buttonGroup.onclick = (evt) => {
    const targetElement = evt.target;
    switch (targetElement.id) {
      case 'drawCircle':
        geometry = new CesiumPlot.Circle(Cesium, viewer);
        break;
      case 'drawPolygon':
        geometry = new CesiumPlot.Polygon(Cesium, viewer);
        break;
      case 'drawReactangle':
        geometry = new CesiumPlot.Reactangle(Cesium, viewer);
        break;
      case 'drawTriangle':
        geometry = new CesiumPlot.Triangle(Cesium, viewer);
        break;
      case 'drawFineArrow':
        geometry = new CesiumPlot.FineArrow(Cesium, viewer, {
          // material: Cesium.Color.fromCssColorString('rgba(59, 178, 208, 0.5)'),
          // outlineMaterial: Cesium.Color.fromCssColorString('rgba(59, 178, 208, 1)'),
          // outlineWidth: 3,
        });
        break;
      case 'drawAttackArrow':
        geometry = new CesiumPlot.AttackArrow(Cesium, viewer, {
          // outlineMaterial: Cesium.Color.RED,
        });
        break;
      case 'drawSwallowtailAttackArrow':
        geometry = new CesiumPlot.SwallowtailAttackArrow(Cesium, viewer, {
          // outlineMaterial: Cesium.Color.BLUE,
        });
        break;
      case 'drawSquadCombat':
        geometry = new CesiumPlot.SquadCombat(Cesium, viewer, {
          // outlineMaterial: new Cesium.PolylineDashMaterialProperty({
          //   color: Cesium.Color.RED,
          //   dashLength: 16.0,
          // }),
        });
        break;
      case 'drawSwallowtailSquadCombat':
        geometry = new CesiumPlot.SwallowtailSquadCombat(Cesium, viewer);
        break;
      case 'drawStraightArrow':
        geometry = new CesiumPlot.StraightArrow(Cesium, viewer, {
          // material: Cesium.Color.RED,
        });
        break;
      case 'drawAssaultDirection':
        geometry = new CesiumPlot.AssaultDirection(Cesium, viewer);
        break;
      case 'drawCurvedArrow':
        geometry = new CesiumPlot.CurvedArrow(Cesium, viewer, {
          // material: Cesium.Color.BLUE,
        });
        break;
      case 'drawDoubleArrow':
        geometry = new CesiumPlot.DoubleArrow(Cesium, viewer, {
          // outlineMaterial: Cesium.Color.GREEN,
        });
        break;
      case 'drawFreehandLine':
        geometry = new CesiumPlot.FreehandLine(Cesium, viewer);
        break;
      case 'drawCurve':
        geometry = new CesiumPlot.Curve(Cesium, viewer);
        break;
      case 'drawEllipse':
        geometry = new CesiumPlot.Ellipse(Cesium, viewer);
        break;
      case 'drawLune':
        geometry = new CesiumPlot.Lune(Cesium, viewer);
        break;
      case 'drawFreehandPolygon':
        geometry = new CesiumPlot.FreehandPolygon(Cesium, viewer, {
          // material: Cesium.Color.GREEN,
          // outlineMaterial: Cesium.Color.fromCssColorString('rgba(59, 178, 208, 1)'),
          // outlineWidth: 2,
        });
        break;
      case 'hide':
        geometry &&
          geometry.hide({
            deration: 2000,
          });
        break;
      case 'show':
        geometry &&
          geometry.show({
            deration: 2000,
          });
        break;
      case 'remove':
        geometry && geometry.remove();
        geometry = null;
        break;
      case 'addEvent':
        if (geometry) {
          geometry.on('drawStart', dragStartHandler);
          geometry.on('drawUpdate', drawUpdateHandler);
          geometry.on('drawEnd', drawEndHandler);
          geometry.on('editStart', editStartHandler);
          geometry.on('editEnd', editEndHandler);
        }
        break;
      case 'removeEvent':
        if (geometry) {
          geometry.off('drawStart', dragStartHandler);
          geometry.off('drawUpdate', drawUpdateHandler);
          geometry.off('drawEnd', drawEndHandler);
          geometry.off('editStart', editStartHandler);
          geometry.off('editEnd', editEndHandler);
        }
        break;
      case 'startGrowthAnimation':
        if (geometry) {
          geometry.startGrowthAnimation({
            duration: 2000,
          });
        }
        break;
      default:
        break;
    }
  };
};