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/services/alert_detail_service.dart';
import 'package:smart_hotel_app/views/home/index/cubit/home_index_cubit.dart';
import 'package:smart_hotel_app/utils/toast_utils.dart';

class TemperatureBlock extends StatelessWidget {
  final int alertId;
  final String temperatureAlarmTitle;
  final String temperatureAlarmLocation;
  final String currentTemperature;
  final String currentVoltage;
  final String currentCurrent;
  final String waitTime;
  final String alarmLevel;
  final AlertDetailService? alertDetailService;

  const TemperatureBlock({
    super.key,
    required this.alertId,
    required this.temperatureAlarmTitle,
    required this.temperatureAlarmLocation,
    required this.currentTemperature,
    required this.currentVoltage,
    required this.currentCurrent,
    required this.waitTime,
    required this.alarmLevel,
    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(
        children: [
          Container(
            width: double.infinity,
            margin: EdgeInsets.only(bottom: 16.h),
            child: Row(
              crossAxisAlignment: CrossAxisAlignment.center,
              children: [
                Container(
                  width: 66.w,
                  height: 68.h,
                  decoration: BoxDecoration(
                    color: const Color.fromRGBO(235, 244, 255, 1.0),
                    borderRadius: BorderRadius.circular(12.r),
                  ),
                  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(
                        temperatureAlarmTitle,
                        style: TextStyle(
                          fontSize: 28.sp,
                          fontWeight: FontWeight.bold,
                          color: const Color.fromRGBO(0, 0, 0, 1.0),
                        ),
                      ),
                      SizedBox(height: 4.h),
                      Text(
                        temperatureAlarmLocation,
                        style: TextStyle(
                          fontSize: 24.sp,
                          color: const Color.fromRGBO(100, 116, 139, 1.0),
                        ),
                      ),
                    ],
                  ),
                ),
                Text(
                  alarmLevel,
                  style: TextStyle(
                    fontSize: 24.sp,
                    color: alarmLevel=="置顶" ? const Color.fromRGBO(255, 100, 101, 1.0) : const Color.fromRGBO(255, 204, 21, 1.0),
                  ),
                ),
              ],
            ),
          ),
          Container(
            width: double.infinity,
            padding: EdgeInsets.symmetric(vertical: 20.h),
            decoration: BoxDecoration(
              color: const Color.fromRGBO(235, 244, 255, 1.0),
              borderRadius: BorderRadius.circular(16.r),
            ),
            child: Row(
              mainAxisAlignment: MainAxisAlignment.spaceAround,
              children: [
                Expanded(
                  child: Column(
                    mainAxisSize: MainAxisSize.min,
                    children: [
                      Text(
                        '$currentTemperature',
                        style: TextStyle(
                          fontSize: 40.sp,
                          fontWeight: FontWeight.bold,
                          color: const Color.fromRGBO(255, 77, 79, 1.0),
                        ),
                      ),
                      SizedBox(height: 4.h),
                      Text(
                        '当前温度',
                        style: TextStyle(
                          fontSize: 20.sp,
                          color: const Color.fromRGBO(100, 116, 139, 1.0),
                        ),
                      ),
                    ],
                  ),
                ),
                Expanded(
                  child: Column(
                    mainAxisSize: MainAxisSize.min,
                    children: [
                      Text(
                        '${currentVoltage}',
                        style: TextStyle(
                          fontSize: 40.sp,
                          fontWeight: FontWeight.bold,
                          color: const Color.fromRGBO(66, 165, 245, 1.0),
                        ),
                      ),
                      SizedBox(height: 4.h),
                      Text(
                        '电压',
                        style: TextStyle(
                          fontSize: 20.sp,
                          color: const Color.fromRGBO(100, 116, 139, 1.0),
                        ),
                      ),
                    ],
                  ),
                ),
                Expanded(
                  child: Column(
                    mainAxisSize: MainAxisSize.min,
                    children: [
                      Text(
                        '${currentCurrent}',
                        style: TextStyle(
                          fontSize: 40.sp,
                          fontWeight: FontWeight.bold,
                          color: const Color.fromRGBO(66, 165, 245, 1.0),
                        ),
                      ),
                      SizedBox(height: 4.h),
                      Text(
                        '电流',
                        style: TextStyle(
                          fontSize: 20.sp,
                          color: const Color.fromRGBO(100, 116, 139, 1.0),
                        ),
                      ),
                    ],
                  ),
                ),
              ],
            ),
          ),
          SizedBox(height: 16.h),
          Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: [
              Row(
                children: [
                  Icon(
                    Icons.access_time,
                    color: const Color.fromRGBO(100, 116, 139, 1.0),
                    size: 24.sp,
                  ),
                  SizedBox(width: 8.w),
                  Text(
                    '已等待$waitTime·',
                    style: TextStyle(
                      fontSize: 24.sp,
                      color: const Color.fromRGBO(100, 116, 139, 1.0),
                    ),
                  ),
                  Text(
                    alarmLevel,
                    style: TextStyle(
                      fontSize: 24.sp,
                      fontWeight: FontWeight.bold,
                      color: const Color.fromRGBO(255, 77, 79, 1.0),
                    ),
                  ),
                ],
              ),
              GestureDetector(
                onTap: () => _showHandleDialog(context),
                child: Container(
                  padding: EdgeInsets.symmetric(horizontal: 32.w, vertical: 20.h),
                  decoration: BoxDecoration(
                    color: const Color.fromRGBO(66, 165, 245, 1.0),
                    borderRadius: BorderRadius.circular(16.r),
                  ),
                  child: Text(
                    '立即处理',
                    style: TextStyle(
                      fontSize: 24.sp,
                      color: Colors.white,
                    ),
                  ),
                ),
              ),
            ],
          ),
        ],
      ),
    );
  }

  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(
                      temperatureAlarmTitle,
                      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) {
        showToast('操作成功');
        context.read<HomeIndexCubit>().reloadDashboard();
      }
    } catch (e) {
      if (context.mounted) {
        showToast('操作失败: $e');
      }
    }
  }
}