import 'package:flutter/material.dart';
import 'package:get/get.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 Scaffold(
      resizeToAvoidBottomInset: false,
      body: Column(
        children: [
          Expanded(
            child: Stack(
              children: [
                Row(
                  children: [
                    Expanded(
                        flex: 1,
                        child: Obx(
                          () => Column(
                            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(),
                          ),
                        )),
                    _buildDeviceImage(),
                    Expanded(
                      flex: 5,
                      child: Stack(
                        children: [
                          Container(
                            padding: const EdgeInsets.all(16),
                            child: Column(
                              children: [
                                _buildContent(),
                              ],
                            ),
                          ),
                          _buildSaveButton(),
                        ],
                      ),
                    )
                  ],
                ),
                _buildGenerateReport(),
              ],
            ),
          ),
        ],
      ),
    );
  }

  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';
      default:
        return 'assets/images/exam/normalMeasurementChart.png';
    }
  }

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

  Widget _buildGenerateReport() {
    return Positioned(
      bottom: 100,
      left: 16,
      child: VButton(
        onTap: controller.saveCachedAppDataId,
        child: const Text(
          '生成检测',
          style: TextStyle(fontSize: 26),
        ),
      ),
    );
  }

  Widget _buildSaveButton() {
    return Obx(() {
      if (Store.user.currentSelectPatientInfo == null) {
        return const SizedBox();
      }
      return Positioned(
        bottom: 100,
        right: 16,
        child: VButton(
          onTap: controller.createDiagnosis,
          child: const Text(
            '保存',
            style: TextStyle(fontSize: 26),
          ),
        ),
      );
    });
  }

  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();
        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: 100,
      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! ? 100 : 90,
        height: 60,
        child: Text(
          title,
          style: TextStyle(
            fontSize: 26,
            color: isActive! ? Colors.white : Colors.black,
          ),
        ),
      ),
    );
  }
}
