import 'dart:math';

import 'package:cpnav/service/pile_cm.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:scence_map/controllers/controller.dart';
import 'package:scence_map/controllers/plumController.dart';

import '../../../../service/pile/device_type.dart';
import '../../../../service/pile/input.dart';
import '../../../../service/pile/public_widget.dart';
import '../../task_page.dart';
import '../../taskcontroller.dart';
import 'pileGenerController.dart';

final ScenceMapController mapController = Get.find<ScenceMapController>();
final PlumDataController controller = Get.find<PlumDataController>();
final TaskController taskcontroller = Get.put(TaskController());

class PileGenerate extends StatefulWidget {
  const PileGenerate({super.key});

  @override
  _PileGenerateState createState() => _PileGenerateState();
}

class _PileGenerateState extends State<PileGenerate> {
  late StepDialogManager _showStepDialog;

  @override
  void initState() {
    super.initState();
    _showStepDialog = StepDialogManager(context);
  }

  @override
  Widget build(BuildContext context) {
    double titleTextWidth = 90;
    double inputLength = 120;
    FocusNode xFocus = FocusNode();
    FocusNode yFocus = FocusNode();
    FocusNode directionFocus = FocusNode();
    FocusNode pileSpaceFocus = FocusNode();
    FocusNode pileWidthFocus = FocusNode();
    DeviceType deviceType = getDeviceType(context);
    double fontSize = 16;
    if (deviceType == DeviceType.mobile) {
      fontSize = 16;
    } else {
      fontSize = 20;
    }
    double centerPointX = controller.centerXY.value.dx;
    double centerPointY = controller.centerXY.value.dy;

    final size = MediaQuery.of(context).size;
    return OrientationBuilder(builder: ((context, orientation) {
      return Scaffold(
        appBar: AppBar(
          title: const Text("桩点生成"),
          toolbarHeight: 30,
          leading: IconButton(
            icon: Icon(Icons.close),
            onPressed: () {
              setState(() {
                pilecontroller.isPileCardVisible.value = false;
                pilecontroller.isRealViewCardVisible.value = false;
              });
            },
          ),
        ),
        body: SizedBox(
          height: size.height,
          child: Stack(
            children: [
              SingleChildScrollView(
                  child: AlignWrapWidget(
                children: [
                  Row(
                    children: [
                      const Text('地图显示:'),
                      Obx(() => Switch(
                          value: controller.isMap.value,
                          onChanged: ((value) {
                            controller.isMap.value = !controller.isMap.value;
                          }))),
                    ],
                  ),
                  AlignWrapWidget(
                    children: [
                      ElevatedButton(
                        child: const Text("夯锤坐标"),
                        onPressed: () => {controller.isDirect.value = false},
                      ),
                      const SizedBox(
                        width: 10,
                      ),
                      ElevatedButton(
                          child: const Text("桩点坐标"),
                          onPressed: () => {
                                controller.isGenerate.value = true,
                                controller.checkValue.value = "checkPile",
                                controller.isDirect.value = false,
                                pilecontroller.isPileCardVisible.value = false,
                                if (!taskcontroller.isDialogShown[1])
                                  {
                                    _showStepDialog.showStepDialog(1),
                                    taskcontroller.isDialogShown[1] = true
                                  }
                              }),
                      const SizedBox(
                        width: 10,
                      ),
                      ElevatedButton(
                          child: const Text("方向设置"),
                          onPressed: () => {
                                controller.isGenerate.value = true,
                                controller.checkValue.value = "checkDirection",
                                controller.isDirect.value = true,
                                controller.centerXY.value =
                                    Offset(centerPointX, centerPointY),
                                pilecontroller.isPileCardVisible.value = false,
                                if (!taskcontroller.isDialogShown[3])
                                  {
                                    _showStepDialog.showStepDialog(3),
                                    taskcontroller.isDialogShown[3] = true
                                  }
                              }),
                    ],
                  ),
                  Row(children: [
                    FixedWidthTextWidget(width: titleTextWidth, text: "X:"),
                    inputText(
                        inputLength: inputLength,
                        value: centerPointX.toString(),
                        fontsize: fontSize,
                        focusNode: yFocus,
                        onChanged: (value) => value.isNotEmpty
                            ? centerPointY = double.parse(value)
                            : '')
                  ]),
                  Row(children: [
                    FixedWidthTextWidget(width: titleTextWidth, text: "Y:"),
                    inputText(
                        inputLength: inputLength,
                        value: centerPointY.toString(),
                        fontsize: fontSize,
                        focusNode: xFocus,
                        onChanged: (value) => value.isNotEmpty
                            ? centerPointX = double.parse(value)
                            : '')
                  ]),
                  Row(children: [
                    FixedWidthTextWidget(width: titleTextWidth, text: "方向(°):"),
                    inputText(
                        inputLength: inputLength,
                        value: controller.direction.toString(),
                        fontsize: fontSize,
                        focusNode: directionFocus,
                        keyboardType: 0,
                        onChanged: (value) {
                          if (value.isNotEmpty) {
                            controller.direction.value = double.parse(value);
                            // bug 值修改后 绘制没有变化
                            controller.angle.value =
                                controller.direction.value * pi / 180;
                          }
                        })
                  ]),
                  Row(children: [
                    FixedWidthTextWidget(
                        width: titleTextWidth + 10, text: "夯点间距(m):"),
                    inputText(
                        inputLength: inputLength - 10,
                        fontsize: fontSize,
                        value: controller.space.toString(),
                        focusNode: pileSpaceFocus,
                        onChanged: (value) => {
                              value.isNotEmpty
                                  ? controller.space.value = double.parse(value)
                                  : '',
                            })
                  ]),
                  Row(children: [
                    FixedWidthTextWidget(
                        width: titleTextWidth + 10, text: "宽度(m):"),
                    inputText(
                        inputLength: inputLength - 10,
                        fontsize: fontSize,
                        value: controller.pileWidth.toString(),
                        focusNode: pileWidthFocus,
                        onChanged: (value) => {
                              value.isNotEmpty
                                  ? controller.pileWidth.value =
                                      double.parse(value)
                                  : '',
                            })
                  ]),
                  Row(children: [
                    const Icon(
                      Icons.tips_and_updates_outlined,
                      color: Colors.red,
                    ),
                    Text(
                      controller.isPileId.value
                          ? '选中桩点:${controller.checkName.value}'
                          : ' 未选中桩点',
                      style: TextStyle(
                          color: !controller.isPileId.value
                              ? Colors.red
                              : Colors.black),
                    )
                  ]),
                ],
              )),
              Positioned(
                  bottom: 10,
                  child: Row(
                    children: [
                      TextButton(
                        child: const Text('取消'),
                        onPressed: () {
                          controller.isGenerate.value = false;
                          controller.isDirect.value = false;
                          controller.isSave.value = false;
                          // 执行取消的逻辑
                        },
                      ),
                      TextButton(
                        child: const Text('确定'),
                        onPressed: () {
                          // 执行确定的逻辑
                          var dx = (controller.canvasSize.width) / 2;
                          var dy = (controller.canvasSize.height) / 2;
                          var rotation = mapController.rotation.value;
                          for (int i = 0; i < controller.plumList.length; i++) {
                            Offset item = controller.plumList[i];

                            var dx1 = ((item.dx - dx) * cos(rotation) +
                                (item.dy - dy) * sin(rotation));
                            var dy1 = -(item.dx - dx) * sin(rotation) +
                                (item.dy - dy) * cos(rotation);

                            Offset xy = mapController.ScreenCenter2xy(dx1, dy1);
                            PilePoint pilePoint = PilePoint(
                                x: (xy.dx * 1000).roundToDouble() / 1000,
                                y: (xy.dy * 1000).roundToDouble() / 1000,
                                times: 0,
                                id: i + 1,
                                radius: 0.3);
                            mapController.pilePoints.add(pilePoint);

                          }
                          controller.isGenerate.value = false;
                          controller.isDirect.value = false;
                          controller.isSave.value = true;
                          controller.centerXY.value =
                              Offset(centerPointX, centerPointY);
                        },
                      ),
                    ],
                  ))
            ],
          ),
        ),
      );
    }));
  }
}

final PileGenerController pilecontroller = Get.put(PileGenerController());

//卡片
class PileGenerateCard extends StatelessWidget {
  const PileGenerateCard();

  @override
  Widget build(BuildContext context) {
    final Size size = MediaQuery.of(context).size;
    MediaQueryData mediaQueryData =
        MediaQueryData.fromView(WidgetsBinding.instance.window); //获取当前屏幕信息
    final orientation = mediaQueryData.orientation; //获得设备方向
    double rectWidth = size.width;
    final deviceType = getDeviceType(context);
    if (orientation == Orientation.landscape) {
      rectWidth = size.width / 2;
      if (deviceType == DeviceType.mobile) {
        rectWidth = size.height - 130;
      }
    } else {
      rectWidth = size.height / 2;
      if (deviceType == DeviceType.mobile) {
        rectWidth = size.width - 5;
      }
    }

    return Obx(() => Visibility(
        visible: pilecontroller.isPileCardVisible.value,
        child: Positioned(
            right: 0,
            top: 0,
            width: rectWidth - 30,
            height: rectWidth + 45,
            child: Stack(children: [
              Container(
                  decoration: const BoxDecoration(color: Colors.transparent),
                  child: Stack(children: [
                    Card(
                      color: Colors.transparent,
                      elevation: 5.0,
                      child: PileGenerate(),
                    ),
                  ]))
            ]))));
  }
}

//卡片
class PileGenerateCard1 extends StatelessWidget {
  const PileGenerateCard1();

  @override
  Widget build(BuildContext context) {
    final Size size = MediaQuery.of(context).size;
    MediaQueryData mediaQueryData =
        MediaQueryData.fromView(WidgetsBinding.instance.window); //获取当前屏幕信息
    final orientation = mediaQueryData.orientation; //获得设备方向
    double rectWidth = size.width;
    final deviceType = getDeviceType(context);
    if (orientation == Orientation.landscape) {
      rectWidth = size.width / 2;
      if (deviceType == DeviceType.mobile) {
        rectWidth = size.height - 130;
      }
    } else {
      rectWidth = size.height / 2;
      if (deviceType == DeviceType.mobile) {
        rectWidth = size.width - 5;
      }
    }

    return Obx(() => Visibility(
        visible: pilecontroller.isRealViewCardVisible.value,
        child: Positioned(
            right: 0,
            top: 0,
            width: rectWidth - 30,
            height: rectWidth + 45,
            child: Stack(children: [
              Container(
                  decoration: const BoxDecoration(color: Colors.transparent),
                  child: Stack(children: [
                    Card(
                      color: Colors.transparent,
                      elevation: 5.0,
                      child: PileGenerate(),
                    ),
                  ]))
            ]))));
  }
}