// ignore_for_file: use_build_context_synchronously

import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:maps_launcher/maps_launcher.dart';
import '../device_alias_model.dart';
import '../../../product/constant/icon/icon_constants.dart';
import '../../../product/constant/image/image_constants.dart';
import '../../../product/extention/context_extention.dart';
import '../../../product/services/api_services.dart';
import '../../../product/services/language_services.dart';
import '../../../product/utils/device_utils.dart';
import '../../../product/shared/shared_snack_bar.dart';

Future<Widget> warningCard(
    BuildContext context, APIServices apiServices, DeviceWithAlias item) async {
  Color backgroundColor = Colors.blue;
  Color textColor = Colors.white;
  String message = "";
  String fullLocation =
      await DeviceUtils.instance.getFullDeviceLocation(context, item.areaPath!);
  String time = "";
  for (var sensor in item.status!.sensors!) {
    if (sensor.name! == "11") {
      DateTime dateTime =
          DateTime.fromMillisecondsSinceEpoch((sensor.time!) * 1000);
      time = DateFormat('yyyy-MM-dd HH:mm:ss').format(dateTime);
    }
  }
  if (item.state! == 3) {
    backgroundColor = Colors.grey;
    textColor = Colors.black;
    message = appLocalization(context).in_progress_message;
  } else if (item.state! == 2) {
    backgroundColor = const Color.fromARGB(255, 6, 138, 72);
    textColor = const Color.fromARGB(255, 255, 255, 255);
    message = appLocalization(context).gf_in_firefighting_message;
  } else if (item.state! == 1) {
    backgroundColor = const Color.fromARGB(255, 250, 63, 63);
    textColor = Colors.white;
    message = appLocalization(context).button_fake_fire_message;
  } else {
    backgroundColor = Colors.black;
    textColor = Colors.white;
    message = appLocalization(context).disconnect_message_uppercase;
  }
  return Card(
    // color: Color.fromARGB(255, 208, 212, 217),
    child: Padding(
      padding: context.paddingLow,
      child: Column(
        mainAxisAlignment: MainAxisAlignment.start,
        crossAxisAlignment: CrossAxisAlignment.start,
        mainAxisSize: MainAxisSize.min,
        children: [
          Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: [
              Column(
                mainAxisAlignment: MainAxisAlignment.start,
                crossAxisAlignment: CrossAxisAlignment.start,
                children: [
                  SizedBox(
                    child: Text(
                      appLocalization(context).smoke_detecting_message,
                      style: const TextStyle(
                        letterSpacing: 1,
                        fontWeight: FontWeight.bold,
                        color: Colors.red,
                        fontSize: 18,
                      ),
                    ),
                  ),
                  SizedBox(height: context.lowValue),
                  SizedBox(
                    child: Text(
                      "${appLocalization(context).device_title}: ${item.name}",
                      style: const TextStyle(
                        fontWeight: FontWeight.bold,
                        fontSize: 18,
                      ),
                      maxLines: 2,
                      overflow: TextOverflow.ellipsis,
                      softWrap: true,
                      textAlign: TextAlign.start,
                    ),
                  ),
                ],
              ),
              SizedBox(
                height: context.dynamicWidth(0.15),
                width: context.dynamicWidth(0.15),
                child: Image.asset(
                    ImageConstants.instance.getImage("fire_warning")),
              )
            ],
          ),
          SizedBox(height: context.lowValue),
          Row(
            children: [
              IconConstants.instance
                  .getMaterialIcon(Icons.location_on_outlined),
              SizedBox(
                width: context.lowValue,
              ),
              Expanded(
                child: Text(
                  fullLocation,
                  style: const TextStyle(fontSize: 15),
                  maxLines: 2,
                  overflow: TextOverflow.ellipsis,
                  softWrap: true,
                  textAlign: TextAlign.start,
                ),
              ),
            ],
          ),
          SizedBox(height: context.lowValue),
          Row(
            children: [
              IconConstants.instance.getMaterialIcon(Icons.schedule),
              SizedBox(
                width: context.lowValue,
              ),
              Expanded(
                child: Text(
                  time,
                  style: const TextStyle(fontSize: 15),
                  maxLines: 2,
                  overflow: TextOverflow.ellipsis,
                  softWrap: true,
                  textAlign: TextAlign.start,
                ),
              ),
            ],
          ),
          SizedBox(
            height: context.lowValue,
          ),
          Row(
            mainAxisAlignment: MainAxisAlignment.start,
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              IconButton.outlined(
                onPressed: () async => {},
                // displayListOfFireStationPhoneNumbers(testDevice),
                icon: IconConstants.instance.getMaterialIcon(Icons.call),
                iconSize: 25,
                style: ButtonStyle(
                  backgroundColor:
                      MaterialStateProperty.all<Color>(Colors.blue[300]!),
                ),
              ),
              const SizedBox(width: 10),
              IconButton.outlined(
                onPressed: () async {
                  String markerLabel = "Destination";
                  MapsLauncher.launchCoordinates(
                      double.parse(item.settings!.latitude!),
                      double.parse(item.settings!.longitude!),
                      markerLabel);
                },
                icon: const Icon(Icons.directions),
                iconSize: 25,
                style: ButtonStyle(
                  backgroundColor:
                      MaterialStateProperty.all<Color>(Colors.blue[300]!),
                ),
              ),
              SizedBox(width: context.mediumValue),
              Expanded(
                child: Align(
                  alignment: Alignment.centerRight,
                  child: OutlinedButton(
                    style: ButtonStyle(
                        backgroundColor:
                            MaterialStatePropertyAll(backgroundColor)),
                    onPressed: () async {
                      if (message ==
                          appLocalization(context).button_fake_fire_message) {
                        await showDialog(
                          context: context,
                          builder: (context) => AlertDialog(
                            icon: const Icon(Icons.warning),
                            iconColor: Colors.red,
                            title: Text(appLocalization(context)
                                .confirm_fake_fire_message),
                            content: Text(appLocalization(context)
                                .confirm_fake_fire_body),
                            actions: [
                              TextButton(
                                onPressed: () async {
                                  int statusCode = await apiServices
                                      .confirmFakeFireByUser(item.thingId!);
                                  if (statusCode == 200) {
                                    showNoIconTopSnackBar(
                                        context,
                                        appLocalization(context)
                                            .notification_confirm_fake_fire_success,
                                        Colors.green,
                                        Colors.white);
                                  } else {
                                    showNoIconTopSnackBar(
                                        context,
                                        appLocalization(context)
                                            .notification_confirm_fake_fire_failed,
                                        Colors.red,
                                        Colors.red);
                                  }
                                  Navigator.of(context).pop();
                                },
                                child: Text(
                                    appLocalization(context)
                                        .confirm_fake_fire_sure_message,
                                    style: const TextStyle(color: Colors.red)),
                              ),
                              TextButton(
                                onPressed: () {
                                  Navigator.of(context).pop();
                                },
                                child: Text(appLocalization(context)
                                    .cancel_button_content),
                              ),
                            ],
                          ),
                        );
                      } else {
                        showNoIconTopSnackBar(
                            context,
                            appLocalization(context).let_PCCC_handle_message,
                            Colors.orange,
                            Colors.white);
                      }
                    },
                    child: Text(
                      message,
                      style: TextStyle(color: textColor),
                    ),
                  ),
                ),
              ),
            ],
          ),
        ],
      ),
    ),
  );
}
