import 'package:auto_route/auto_route.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:smart_hotel_app/repositories/alert_detail_repository.dart';
import 'package:smart_hotel_app/routes/app_router.gr.dart';
import 'package:smart_hotel_app/services/alert_detail_service.dart';
import 'package:smart_hotel_app/views/home/index/cubit/home_index_cubit.dart';

class VoltageOperateBlock extends StatelessWidget {
  final int alertId;
  final String voltageAlarmTitle;
  final String voltageAlarmLocation;
  final String voltageValue;
  final String normalVoltage;
  final String voltageWaitTime;
  final String voltageAlarmLevel;
  final AlertDetailService? alertDetailService;

  const VoltageOperateBlock({
    super.key,
    required this.alertId,
    required this.voltageAlarmTitle,
    required this.voltageAlarmLocation,
    required this.voltageValue,
    required this.normalVoltage,
    required this.voltageWaitTime,
    required this.voltageAlarmLevel,
    this.alertDetailService,
  });

  @override
  Widget build(BuildContext context) {
    return Container(
      width: double.infinity,
      padding: EdgeInsets.all(20.w),
      decoration: BoxDecoration(
        borderRadius: BorderRadius.circular(20.r),
        color: Colors.white,
      ),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          Container(
            width: double.infinity,
            margin: EdgeInsets.only(bottom: 16.h),
            child: Row(
              crossAxisAlignment: CrossAxisAlignment.center,
              children: [
                Container(
                  width: 64.w,
                  height: 66.h,
                  decoration: BoxDecoration(
                    color: const Color.fromRGBO(235, 244, 255, 1.0),
                    borderRadius: BorderRadius.circular(12.r),
                    border: Border.all(
                      color: const Color.fromRGBO(66, 165, 245, 1.0),
                      width: 2.w,
                      style: BorderStyle.solid,
                    ),
                  ),
                  child: Icon(
                    Icons.thermostat_outlined,
                    color: const Color.fromRGBO(66, 165, 245, 1.0),
                    size: 32.sp,
                  ),
                ),
                SizedBox(width: 16.w),
                Expanded(
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      Text(
                        voltageAlarmTitle,
                        style: TextStyle(
                          fontSize: 28.sp,
                          fontWeight: FontWeight.bold,
                          color: Colors.black,
                        ),
                      ),
                      SizedBox(height: 4.h),
                      Text(
                        voltageAlarmLocation,
                        style: TextStyle(
                          fontSize: 24.sp,
                          color: const Color.fromRGBO(100, 116, 139, 1.0),
                        ),
                      ),
                    ],
                  ),
                ),
                Text(
                  voltageAlarmLevel,
                  style: TextStyle(
                    fontSize: 24.sp,
                    color: voltageAlarmLevel=="置顶" ? const Color.fromRGBO(255, 100, 101, 1.0) : const Color.fromRGBO(255, 204, 21, 1.0),
                  ),
                ),
              ],
            ),
          ),
          Container(
            width: double.infinity,
            margin: EdgeInsets.only(left: 80.w, bottom: 20.h),
            child: Text(
              '电压${voltageValue}V (正常≤${normalVoltage}V)·已等待$voltageWaitTime',
              style: TextStyle(
                fontSize: 24.sp,
                color: const Color.fromRGBO(100, 116, 139, 1.0),
              ),
            ),
          ),
          Container(
            width: double.infinity,
            child: Row(
              children: [
                Expanded(
                  child: GestureDetector(
                    onTap: () => _showHandleDialog(context),
                    child: Container(
                      height: 88.h,
                      decoration: BoxDecoration(
                        color: const Color.fromRGBO(66, 165, 245, 1.0),
                        borderRadius: BorderRadius.circular(16.r),
                      ),
                      child: Center(
                        child: Text(
                          '确认处理',
                          style: TextStyle(
                            fontSize: 28.sp,
                            color: Colors.white,
                          ),
                        ),
                      ),
                    ),
                  ),
                ),
                SizedBox(width: 20.w),
                Expanded(
                  child: GestureDetector(
                    onTap: () {
                      context.pushRoute(AbnormalDetailRoute(alertId: alertId));
                    },
                    child: Container(
                      height: 88.h,
                      decoration: BoxDecoration(
                        color: const Color.fromRGBO(235, 244, 255, 1.0),
                        borderRadius: BorderRadius.circular(16.r),
                      ),
                      child: Center(
                        child: Text(
                          '查看详情',
                          style: TextStyle(
                            fontSize: 28.sp,
                            color: const Color.fromRGBO(100, 116, 139, 1.0),
                          ),
                        ),
                      ),
                    ),
                  ),
                ),
              ],
            ),
          ),
        ],
      ),
    );
  }

  void _showHandleDialog(BuildContext context) {
    showDialog(
      context: context,
      barrierDismissible: true,
      builder: (dialogContext) {
        return Dialog(
          shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(16.r),
          ),
          child: Container(
            padding: EdgeInsets.all(24.w),
            decoration: BoxDecoration(
              color: Colors.white,
              borderRadius: BorderRadius.circular(16.r),
            ),
            child: Column(
              mainAxisSize: MainAxisSize.min,
              children: [
                Row(
                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
                  children: [
                    Text(
                      voltageAlarmTitle,
                      style: TextStyle(
                        fontSize: 30.sp,
                        fontWeight: FontWeight.bold,
                        color: Colors.black,
                      ),
                    ),
                    GestureDetector(
                      onTap: () => Navigator.of(dialogContext).pop(),
                      child: Icon(
                        Icons.close,
                        color: const Color.fromRGBO(100, 116, 139, 1.0),
                        size: 32.sp,
                      ),
                    ),
                  ],
                ),
                SizedBox(height: 16.h),
                Container(
                  width: double.infinity,
                  padding: EdgeInsets.symmetric(
                    horizontal: 20.w,
                    vertical: 20.h,
                  ),
                  decoration: BoxDecoration(
                    color: const Color.fromRGBO(242, 243, 245, 1),
                    borderRadius: BorderRadius.circular(12.r),
                  ),
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      Text(
                        '解决办法:',
                        style: TextStyle(
                          fontSize: 26.sp,
                          fontWeight: FontWeight.bold,
                          color: Colors.black,
                        ),
                      ),
                      SizedBox(height: 12.h),
                      Text(
                        '1.检查输入电压是否正常;\n2.确认设备是否正常运行;\n3.若异常,请联系电工。',
                        style: TextStyle(
                          fontSize: 26.sp,
                          color: const Color.fromRGBO(100, 116, 139, 1.0),
                          height: 1.5,
                        ),
                      ),
                    ],
                  ),
                ),
                SizedBox(height: 20.h),
                GestureDetector(
                  onTap: () {
                    Navigator.of(dialogContext).pop();
                    _handleAlert(context);
                  },
                  child: Container(
                    width: double.infinity,
                    height: 72.h,
                    decoration: BoxDecoration(
                      color: const Color.fromRGBO(66, 165, 245, 1.0),
                      borderRadius: BorderRadius.circular(12.r),
                    ),
                    child: Center(
                      child: Text(
                        '确认',
                        style: TextStyle(
                          fontSize: 28.sp,
                          color: Colors.white,
                        ),
                      ),
                    ),
                  ),
                ),
              ],
            ),
          ),
        );
      },
    );
  }

  Future<void> _handleAlert(BuildContext context) async {
    try {
      final service = alertDetailService ??
          AlertDetailService(repository: AlertDetailRepository());
      await service.handleAlert(alertId: alertId);
      if (context.mounted) {
        ScaffoldMessenger.of(context).showSnackBar(
          const SnackBar(content: Text('操作成功')),
        );
        context.read<HomeIndexCubit>().reloadDashboard();
      }
    } catch (e) {
      if (context.mounted) {
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(content: Text('操作失败: $e')),
        );
      }
    }
  }
}