import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:syncrow_web/pages/device_managment/all_devices/models/device_reports.dart';
import 'package:syncrow_web/pages/device_managment/shared/table/table_cell_widget.dart';
import 'package:syncrow_web/pages/device_managment/shared/table/table_header.dart';
import 'package:syncrow_web/utils/color_manager.dart';
import 'package:syncrow_web/utils/extension/build_context_x.dart';

// ignore: must_be_immutable
class ReportsTable extends StatelessWidget {
  final DeviceReport report;
  final String? thirdColumnTitle;
  final String? thirdColumnDescription;
  final Function(int index) onRowTap;
  final VoidCallback onClose;
  bool? hideValueShowDescription;
  bool? mainDoorSensor;
  bool? garageDoorSensor;
  bool? waterLeak;

  ReportsTable({
    super.key,
    required this.report,
    required this.onRowTap,
    required this.onClose,
    this.thirdColumnTitle,
    this.thirdColumnDescription,
    this.hideValueShowDescription,
    this.mainDoorSensor,
    this.garageDoorSensor,
    this.waterLeak,
  });

  @override
  Widget build(BuildContext context) {
    return report.data == null || report.data!.isEmpty
        ? Container(
            padding: const EdgeInsets.all(20.0),
            width: MediaQuery.sizeOf(context).width,
            alignment: AlignmentDirectional.center,
            height: 100,
            child: Text(
              'No reports found',
              style: context.textTheme.bodyLarge!.copyWith(color: ColorsManager.grayColor),
            ),
          )
        : Stack(
            children: [
              Padding(
                padding: const EdgeInsets.all(20.0),
                child: Table(
                  border: TableBorder.all(color: Colors.grey.shade300, width: 1),
                  columnWidths: const {
                    0: FlexColumnWidth(),
                    1: FlexColumnWidth(),
                    2: FlexColumnWidth(),
                  },
                  children: [
                    TableRow(
                      decoration: BoxDecoration(color: Colors.grey.shade200),
                      children: [
                        const TableHeader(title: 'Date'),
                        const TableHeader(title: 'Time'),
                        TableHeader(title: thirdColumnTitle ?? 'Status'),
                      ],
                    ),
                    if (report.data != null)
                      ...report.data!.asMap().entries.map((entry) {
                        int index = entry.key;
                        DeviceEvent data = entry.value;

                        // Parse eventTime into Date and Time
                        DateTime eventDateTime =
                            DateTime.fromMillisecondsSinceEpoch(data.eventTime!);
                        String date = DateFormat('dd/MM/yyyy').format(eventDateTime);
                        String time = DateFormat('HH:mm').format(eventDateTime);

                        String value;
                        if (hideValueShowDescription == true) {
                          if (mainDoorSensor != null && mainDoorSensor == true) {
                            value = data.value == 'true' ? 'Open' : 'Close';
                          } else if (garageDoorSensor != null && garageDoorSensor == true) {
                            value = data.value == 'true' ? 'Opened' : 'Closed';
                          } else if (waterLeak != null && waterLeak == true) {
                            value = data.value == 'normal' ? 'Normal' : 'Leak Detected';
                          } else {
                            value = '${data.value!} ${thirdColumnDescription ?? ''}';
                          }
                        } else {
                          value = '${data.value!} ${thirdColumnDescription ?? ''}';
                        }

                        return TableRow(
                          children: [
                            TableCellWidget(value: date),
                            TableCellWidget(value: time),
                            TableCellWidget(
                              value: value,
                              onTap: () => onRowTap(index),
                            ),
                          ],
                        );
                      })
                  ],
                ),
              ),
              Positioned(
                top: 0,
                right: 0,
                child: IconButton(
                  icon: const Icon(
                    Icons.close,
                    color: Colors.red,
                    size: 18,
                  ),
                  onPressed: onClose,
                ),
              ),
            ],
          );
  }
}
