import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:vitalapp/components/alert_dialog.dart';
import 'package:vitalapp/pages/medical/widgets/heart_rate.dart';
import 'package:vitalapp/pages/medical/widgets/urinalysis.dart';
import 'package:vnote_device_plugin/consts/types.dart';
import 'package:vitalapp/components/button.dart';
import 'package:vitalapp/pages/medical/controller.dart';
import 'package:vitalapp/pages/medical/widgets/blood_pressure.dart';
import 'package:vitalapp/pages/medical/widgets/blood_sugar.dart';
import 'package:vitalapp/pages/medical/widgets/body_temperature.dart';
import 'package:vitalapp/pages/medical/widgets/body_bmi.dart';
import 'package:vitalapp/pages/medical/widgets/bool_oxygen.dart';
import 'package:vitalapp/store/store.dart';

class MedicalPage extends GetView<MedicalController> {
  const MedicalPage({super.key});

  @override
  Widget build(BuildContext context) {
    return GetBuilder<MedicalController>(
      init: MedicalController(),
      id: "medical_page",
      builder: (_) {
        return Scaffold(
          resizeToAvoidBottomInset: false,
          body: Column(
            children: [
              Expanded(
                  child: Stack(
                children: [
                  _buildMedical(),
                  // _buildGenerateReport(),
                ],
              )),
            ],
          ),
          floatingActionButton: _buildSaveButton(context),
        );
      },
    );
  }

  Widget _buildMedical() {
    return Row(
      children: [
        _buildMedicalMenus(),
        _buildDeviceImage(),
        _buildMedicalInput(),
      ],
    );
  }

  Widget _buildMedicalMenus() {
    return Expanded(
      flex: 2,
      child: Container(
        margin: const EdgeInsets.only(top: 100),
        child: Obx(
          () => ListView(
            // mainAxisAlignment: MainAxisAlignment.center,
            children: controller.state.medicalMenuList
                .map(
                  (e) => Material(
                    borderRadius: const BorderRadius.only(
                      topRight: Radius.circular(30),
                      bottomRight: Radius.circular(30),
                    ),
                    child: Ink(
                      decoration: const BoxDecoration(
                        borderRadius: BorderRadius.only(
                          topRight: Radius.circular(30),
                          bottomRight: Radius.circular(30),
                        ),
                      ),
                      child: InkWell(
                          borderRadius: const BorderRadius.only(
                            topRight: Radius.circular(30),
                            bottomRight: Radius.circular(30),
                          ),
                          onTap: () {
                            controller.state.currentTab = e.key;
                          },
                          child: Obx(
                            () => _SideBar(
                              title: e.diagnosticItem,
                              isActive: controller.state.currentTab == e.key,
                            ),
                          )),
                    ),
                  ),
                )
                .toList(),
          ),
        ),
      ),
    );
  }

  Widget _buildMedicalInput() {
    return Expanded(
      flex: 10,
      child: Stack(
        children: [
          Container(
            padding: const EdgeInsets.all(16),
            child: Column(
              children: [
                _buildContent(),
              ],
            ),
          ),
        ],
      ),
    );
  }

  String _deviceImageUrl(String currentTab) {
    switch (currentTab) {
      case DeviceTypes.TEMP:
        return 'assets/images/healthCheck/temp.png';
      case DeviceTypes.SUGAR:
        return 'assets/images/healthCheck/sugar.png';
      case DeviceTypes.NIBP:
        return 'assets/images/healthCheck/nibp.png';
      case DeviceTypes.SPO2:
        return 'assets/images/healthCheck/spo2.png';
      case DeviceTypes.WEIGHT:
        return 'assets/images/healthCheck/bmi.png';
      case DeviceTypes.URINE:
        return 'assets/images/healthCheck/urine.png';
      default:
        return 'assets/images/exam/normalMeasurementChart.png';
    }
  }

  Widget _buildDeviceImage() {
    return Expanded(
      flex: 6,
      child: Container(
        alignment: Alignment.topCenter,
        margin: const EdgeInsets.all(16).copyWith(top: 10),
        child: Obx(
          () => ClipRect(
            child: Align(
              alignment: Alignment.bottomCenter,
              heightFactor: 0.8,
              child: Image.asset(
                _deviceImageUrl(controller.state.currentTab),
                height: double.infinity,
                fit: BoxFit.contain, // 设置图像的适应方式
              ),
            ),
          ),
        ),
      ),
    );
  }

  Widget _buildGenerateReport() {
    return Positioned(
      bottom: 100,
      left: 16,
      child: VButton(
        onTap: () {
          Get.dialog(
            VAlertDialog(
              title: '提示',
              content: Container(
                margin: const EdgeInsets.only(bottom: 20),
                child: const Text(
                  '当前检测是否已完成，请确定是否结束本次检测',
                  style: TextStyle(fontSize: 20),
                  textAlign: TextAlign.center,
                ),
              ),
              showCancel: true,
              onConfirm: () {
                controller.saveCachedAppDataId();
              },
            ),
          );
        },
        child: const Text(
          '生成检测',
          style: TextStyle(fontSize: 26),
        ),
      ),
    );
  }

  Widget _buildSaveButton(BuildContext context) {
    return Obx(() {
      if (Store.user.currentSelectPatientInfo == null) {
        return const SizedBox();
      }
      return FloatingActionButton.extended(
        backgroundColor: Theme.of(context).primaryColor,
        onPressed: controller.createDiagnosis,
        label: const SizedBox(
          width: 240,
          height: 60,
          child: Center(
            child: Text(
              '提交',
              style: TextStyle(
                fontSize: 26,
                color: Colors.white,
              ),
            ),
          ),
        ),
      );
    });
  }

  Widget _buildContent() {
    return Obx(() {
      switch (controller.state.currentTab) {
        case DeviceTypes.TEMP:
          return const BodyTemperature();
        case DeviceTypes.SUGAR:
          return const BloodSugar();
        case DeviceTypes.NIBP:
          return const BloodPressure();
        case DeviceTypes.SPO2:
          return const BloodOxygen();
        case DeviceTypes.WEIGHT:
          return const BodyWeight();
        case DeviceTypes.URINE:
          return const Urinalysis();
        case DeviceTypes.HEART:
          return const HeartRate();
        default:
          return const SizedBox();
      }
    });
  }
}

class _SideBar extends StatelessWidget {
  const _SideBar({
    required this.title,
    this.isActive,
  });

  final String title;
  final bool? isActive;

  @override
  Widget build(BuildContext context) {
    return Container(
      alignment: Alignment.centerLeft,
      width: 140,
      child: Container(
        margin: const EdgeInsets.only(bottom: 2),
        decoration: BoxDecoration(
          color: isActive!
              ? Theme.of(context).primaryColor
              : Theme.of(context).primaryColor.withOpacity(.2),
          borderRadius: const BorderRadius.only(
            topRight: Radius.circular(30),
            bottomRight: Radius.circular(30),
          ),
        ),
        alignment: Alignment.center,
        width: isActive! ? 140 : 120,
        height: 60,
        child: Text(
          title,
          style: TextStyle(
            fontSize: 26,
            color: isActive! ? Colors.white : Colors.black,
          ),
        ),
      ),
    );
  }
}
