import 'package:fis_measure/interfaces/process/workspace/application.dart';
import 'package:fis_measure/interfaces/process/workspace/point_info.dart';
import 'package:fis_measure/view/gesture/mouse_gesture.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';

import '../positioned_cursor.dart';

/// 箭头注释手势面板
class AnnotationArrowGesturePanel extends StatefulWidget {
  const AnnotationArrowGesturePanel({Key? key}) : super(key: key);

  @override
  State<AnnotationArrowGesturePanel> createState() => _PanelState();
}

class _PanelState extends State<AnnotationArrowGesturePanel> {
  late final application = Get.find<IApplication>();
  CursorDisplayType displayType = CursorDisplayType.none;

  final mouseState = Get.find<IMouseState>();

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTapDown: (details) {
        application.createPointInfo(
          details.localPosition,
          PointInfoType.mouseDown,
        );
      },
      onPanUpdate: (details) {
        mouseState.mousePosition = details.localPosition;
      },
      child: MouseRegion(
        onEnter: (e) {
          setState(() {
            displayType = CursorDisplayType.normal;
          });
        },
        onExit: (e) {
          setState(() {
            displayType = CursorDisplayType.none;
          });
        },
        cursor: SystemMouseCursors.none,
        child: Stack(
          children: [
            _buildCursor(),
          ],
        ),
        onHover: (event) {
          mouseState.mousePosition = event.localPosition;
          application.createPointInfo(
            event.localPosition,
            PointInfoType.mouseMove,
          );
        },
      ),
    );
  }

  Widget _buildCursor() {
    switch (displayType) {
      case CursorDisplayType.none:
        return Container();
      case CursorDisplayType.normal:
        return const PositionedCursor();
      default:
        return const PositionedCursor();
    }
  }
}