import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:intl/intl.dart';

import '../../utils/auth_utils.dart';

class AccomodationListWidget extends StatefulWidget {
  final List<Map<String, dynamic>> accommodationList;
  final Function(bool, Map<String, dynamic>, String) onOpen;
  final Function(Map<String, dynamic>) onDeleteAccommodation;
  final Function(String, bool) onAddNew;
  final bool isViewMode;

  const AccomodationListWidget({
    super.key,
    required this.accommodationList,
    required this.onOpen,
    required this.onDeleteAccommodation,
    required this.onAddNew,
    required this.isViewMode,
  });

  @override
  State<AccomodationListWidget> createState() => _AccomodationListWidgetState();
}

class _AccomodationListWidgetState extends State<AccomodationListWidget> {
  Color? layoutColor;
  Color? secondColor;
  Color? thridColor;

  bool orgHasService = false;

  @override
  void initState() {
    super.initState();
    loadInitialData();
    getOrgServices();
  }

  void loadInitialData() async {
    String? layoutString = await getLayoutColor();
    String? secondString = await getSecondaryColor();
    String? thridString = await getTernaryColor();

    // String? bodyStringColor = await getBodyColor();

    setState(() {
      layoutColor =
          layoutString != null
              ? Color(int.parse(layoutString))
              : Colors.redAccent;

      secondColor =
          layoutString != null
              ? Color(int.parse(secondString!))
              : Colors.orange;

      thridColor =
          layoutString != null
              ? Color(int.parse(thridString!))
              : Colors.orangeAccent;
      // bodyColor =
      // bodyStringColor != null
      //     ? Color(int.parse(bodyStringColor))
      //     : Colors.white;
    });
  }

  void getOrgServices() async {
    final services = await getOrgServicesName();
    print("getOrgServices storage: $services");

    // just names
    final names = services.map((s) => s['name']).toList();
    print("Names only: $names");
    final hasFlight = names.contains("Accomodation");

    setState(() {
      orgHasService = hasFlight;
    });

    print("orgHasService: $orgHasService");
  }

  @override
  Widget build(BuildContext context) {
    final isDesktop = MediaQuery.of(context).size.width > 1024;

    return Padding(
      padding:
          isDesktop ? const EdgeInsets.all(16.0) : const EdgeInsets.all(5.0),
      child: Container(
        margin: const EdgeInsets.only(top: 16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: [
            // Header with title and button
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: [
                if ((!isDesktop) && widget.accommodationList.isNotEmpty)
                  Text(
                    " ",
                    style: const TextStyle(
                      fontSize: 18,
                      fontWeight: FontWeight.bold,
                    ),
                  ),
                if (widget.accommodationList.isNotEmpty && orgHasService)
                  MouseRegion(
                    cursor:
                        widget.isViewMode
                            ? SystemMouseCursors.forbidden
                            : SystemMouseCursors.click,

                    child: GestureDetector(
                      onTap:
                          widget.isViewMode
                              ? null
                              : () {
                                print("New data");
                                widget.onAddNew("Accomodation", true);
                              },
                      child: Row(
                        mainAxisSize:
                            MainAxisSize.min, // Ensures content fits nicely
                        children: [
                          // Text(
                          //   "Add New",
                          //   style: TextStyle(fontSize: 13),
                          // ),
                          // SizedBox(width: 8), // spacing between icon and text
                          Icon(
                            Icons.add_circle_sharp,
                            size: 30,
                            color: Color(0xFF114D8B),
                          ),
                          // Container(
                          //   decoration: BoxDecoration(
                          //     shape: BoxShape.circle,
                          //     border: Border.all(
                          //       color: Color(0xFF114D8B), // Outline color
                          //       width: 2, // Outline thickness
                          //     ),
                          //   ),
                          //   height: 30,
                          //   width: 30,
                          //   child: Center(
                          //     child: Icon(
                          //       Icons.add,
                          //       size: 20,
                          //       color: Colors.black,
                          //     ),
                          //   ),
                          // ),
                        ],
                      ),
                    ),
                    // onPressed: isViewMode
                    //     ? null
                    //     : () {
                    //         print("New data");
                    //
                    //       },
                    // child: Row(
                    //   mainAxisSize: MainAxisSize.min,
                    //   children: [
                    //     Icon(
                    //       Icons.add_circle_sharp,
                    //       size: 30,
                    //       color: Color(0xFF114D8B),
                    //     )
                    //   ],
                    // ),
                  ),
                // MouseRegion(
                //   cursor: isViewMode
                //       ? SystemMouseCursors.forbidden
                //       : SystemMouseCursors.click,
                //   child: ElevatedButton(
                //     style: ElevatedButton.styleFrom(
                //       backgroundColor: Color(0xFF114D8B),
                //       foregroundColor: Colors.white,
                //       disabledBackgroundColor: Color(0xFF114D8B),
                //       disabledForegroundColor: Colors.white,
                //       shape: RoundedRectangleBorder(
                //         borderRadius: BorderRadius.circular(8),
                //         side: BorderSide(color: Color(0xFF114D8B), width: 2),
                //       ),
                //       padding:
                //           EdgeInsets.symmetric(horizontal: 20, vertical: 12),
                //     ),
                //     onPressed: isViewMode
                //         ? null
                //         : () {
                //             print("New data");
                //             onAddNew("Accomodation", true);
                //           },
                //     child: Row(
                //       mainAxisSize:
                //           MainAxisSize.min, // Ensures content fits nicely
                //       children: [
                //         // spacing between icon and text
                //         Icon(
                //           Icons.add_circle_sharp,
                //           size: 30,
                //           color: Color(0xFF114D8B),
                //         )
                //       ],
                //     ),
                //   ),
                // ),
              ],
            ),
            const SizedBox(height: 16),

            // Scroll behavior based on device
            _buildData(context, isDesktop),
          ],
        ),
      ),
    );
  }

  Widget _buildData(BuildContext context, bool isDesktop) {
    List<Map<String, dynamic>> filteredList =
        widget.accommodationList
            .where((item) => item["is_active"] == "1")
            .toList();
    print("filteredList- $filteredList");

    // String formatDate(String dateString) {
    //   try {
    //     DateTime date = DateTime.parse(dateString);
    //     return DateFormat('d MMM yy').format(date); // Example: 4 Apr 25
    //   } catch (e) {
    //     return "Invalid Date";
    //   }
    // }

    String formatDate(String dateString) {
      try {
        DateTime date = DateFormat("dd-MM-yyyy").parse(dateString);
        return DateFormat('dd MMM yy').format(date); // Example: 23 May 25
      } catch (e) {
        return "Invalid Date";
      }
    }

    String formatTime(String timeString) {
      try {
        final parts = timeString.split(':');
        int hour = int.parse(parts[0]);
        int minute = int.parse(parts[1]);

        final now = DateTime.now();

        DateTime dateTime;

        if (hour == 24 && minute == 0) {
          // 24:00 is treated as 00:00 on the next day
          dateTime = DateTime(
            now.year,
            now.month,
            now.day,
          ).add(const Duration(days: 1));
        } else {
          if (hour < 0 || hour > 23 || minute < 0 || minute > 59) {
            throw FormatException("Invalid hour or minute");
          }
          dateTime = DateTime(now.year, now.month, now.day, hour, minute);
        }

        return DateFormat('HH:mm').format(dateTime); // 24-hour format
      } catch (e) {
        return "Invalid Time";
      }
    }

    // String formatTime(String timeString) {
    //   try {
    //     final parts = timeString.split(':');
    //     final now = DateTime.now();
    //     final dateTime = DateTime(
    //       now.year,
    //       now.month,
    //       now.day,
    //       int.parse(parts[0]),
    //       int.parse(parts[1]),
    //     );
    //     return DateFormat.jm().format(dateTime); // e.g., 12:16 PM or 12 AM
    //   } catch (e) {
    //     return "Invalid Time";
    //   }
    // }

    return ListView.builder(
      shrinkWrap: true,
      physics: NeverScrollableScrollPhysics(),
      itemCount: filteredList.length,
      itemBuilder: (context, index) {
        final item = filteredList[index];

        return Container(
          margin: EdgeInsets.symmetric(horizontal: 8, vertical: 6),
          decoration: BoxDecoration(
            borderRadius: BorderRadius.circular(12),
            // color: Colors.orange.shade50,
            color: isDesktop ? Colors.white : thridColor,
            // color: Colors.white,
            boxShadow:
                isDesktop
                    ? [
                      BoxShadow(
                        color: Colors.black12,
                        blurRadius: 3,
                        offset: Offset(0, 1),
                      ),
                    ]
                    : [],
            border: Border(
              top: BorderSide(
                color: Colors.white70, // Change color to match your theme
                width: 2,
              ),
            ),
          ),
          child: Padding(
            padding: isDesktop ? EdgeInsets.all(12) : EdgeInsets.all(8),
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                Row(
                  // mainAxisAlignment: MainAxisAlignment.end,
                  children: [
                    Expanded(
                      flex: 1,
                      child: Text(
                        item["hotel_name"]!,
                        style: GoogleFonts.poppins(
                          fontSize: 14,
                          fontWeight:
                              isDesktop ? FontWeight.w800 : FontWeight.w600,
                          color: !isDesktop ? Colors.black : Color(0xFF575A74),
                        ),
                      ),
                    ),
                    Spacer(),
                    if (orgHasService) ...[
                      GestureDetector(
                        onTap: () => widget.onOpen(true, item, "Accomodation"),
                        child: Tooltip(
                          message: 'Edit Accomodation Details',
                          child: Image.asset(
                            'assets/images/IconsImg/edit.png',
                            width: 20,
                            height: 15,
                            color:
                                isDesktop ? Color(0xFF114D8B) : Colors.black87,
                          ),
                        ),
                      ),
                      SizedBox(width: 10),
                      GestureDetector(
                        onTap: () => widget.onDeleteAccommodation(item),
                        child: Tooltip(
                          message: 'Delete Accommodation Details',
                          child: Image.asset(
                            'assets/images/IconsImg/delete.png',
                            width: 20,
                            height: 15,
                            color: Colors.red,
                          ),
                        ),
                      ),
                    ],
                  ],
                ),
                // Divider(color: Colors.blueGrey.shade50),
                SizedBox(height: 4),
                isDesktop
                    ? Row(
                      children: [
                        Expanded(
                          flex: 2,
                          child: Text(
                            " DestinationCity",
                            style: GoogleFonts.poppins(fontSize: 11),
                          ),
                        ),
                        Expanded(
                          flex: 2,
                          child: Text(
                            " Check (in) ",
                            style: GoogleFonts.poppins(fontSize: 11),
                          ),
                        ),
                        Expanded(
                          flex: 2,
                          child: Text(
                            " Check (out) ",
                            style: GoogleFonts.poppins(fontSize: 11),
                          ),
                        ),
                        Expanded(
                          flex: 2,
                          child: Text(
                            " Comments",
                            style: GoogleFonts.poppins(fontSize: 11),
                          ),
                        ),
                      ],
                    )
                    : SizedBox.shrink(),
                SizedBox(height: 8),
                isDesktop
                    ? Row(
                      children: [
                        Expanded(
                          flex: 2,
                          child: Text(
                            item["destination_city"],
                            style: GoogleFonts.poppins(
                              fontSize: 12,
                              fontWeight: FontWeight.w600,
                            ),
                          ),
                        ),
                        SizedBox(width: 10),
                        Expanded(
                          flex: 2,
                          child: Text(
                            "${formatDate(item["checkin_date"]!)} ${formatTime(item["checkin_time"]!)}",
                            style: GoogleFonts.poppins(
                              fontSize: 12,
                              fontWeight: FontWeight.w600,
                            ),
                          ),
                        ),
                        SizedBox(width: 10),
                        Expanded(
                          flex: 2,
                          child: Text(
                            "${formatDate(item["checkout_date"]!)} ${formatTime(item["checkout_time"]!)}",
                            style: GoogleFonts.poppins(
                              fontSize: 12,
                              fontWeight: FontWeight.w600,
                            ),
                          ),
                        ),
                        SizedBox(width: 10),
                        Expanded(
                          flex: 2,
                          child: _buildComments(
                            "Comments:",
                            item["comments"] ?? "N/A",
                          ),
                        ),
                      ],
                    )
                    : Container(
                      color: Colors.white,
                      padding: EdgeInsets.all(8.0),
                      child: Column(
                        crossAxisAlignment: CrossAxisAlignment.start,
                        children: [
                          _buildRow(
                            "Destination City",
                            item["destination_city"],
                          ),
                          SizedBox(height: 5),
                          _buildRow(
                            "Check (in)",
                            "${formatDate(item["checkin_date"]!)} ${formatTime(item["checkin_time"]!)}",
                          ),
                          SizedBox(height: 5),
                          _buildRow(
                            "Check (out)",
                            "${formatDate(item["checkout_date"]!)} ${formatTime(item["checkout_time"]!)}",
                          ),
                          SizedBox(height: 5),
                          _buildRow("Comments:", item["comments"] ?? "N/A"),
                        ],
                      ),
                    ),

                // Column(
                //         crossAxisAlignment: CrossAxisAlignment.start,
                //         children: [
                //           Wrap(
                //             spacing: 20, // horizontal space between items
                //             runSpacing: 10, // vertical space between rows
                //             children: [
                //               _buildInfoColumn("City", item["destination_city"]),
                //               _buildInfoColumn("Check (In)", "${formatDate(item["checkin_date"]!)} ${formatTime(item["checkin_time"]!)}"),
                //               _buildInfoColumn("Check (Out)", "${formatDate(item["checkout_date"]!)} ${formatTime(item["checkout_time"]!)}"),
                //               // City - long name handled with flexible space
                //               // Expanded(
                //               //   flex: 3,
                //               //   child: _buildInfoColumn("City", item["destination_city"]),
                //               // ),
                //
                //               // SizedBox(width: 8),
                //
                //               // Check In and Check Out stacked right side
                //               // Expanded(
                //               //   flex: 4,
                //               //   child: Column(
                //               //     crossAxisAlignment: CrossAxisAlignment.end,
                //               //     children: [
                //               //       _buildInfoColumn(
                //               //         "Check In",
                //               //         "${formatDate(item["checkin_date"]!)} ${formatTime(item["checkin_time"]!)}",
                //               //       ),
                //               //       SizedBox(height: 6),
                //               //       _buildInfoColumn(
                //               //         "Check Out",
                //               //         "${formatDate(item["checkout_date"]!)} ${formatTime(item["checkout_time"]!)}",
                //               //       ),
                //               //     ],
                //               //   ),
                //               // ),
                //             ],
                //           ),
                //           const SizedBox(height: 10),
                //           const Text(
                //             "Comment",
                //             style: TextStyle(fontWeight: FontWeight.w500),
                //           ),
                //           const SizedBox(height: 5),
                //           if (item["comments"] != null && item["comments"].toString().trim().isNotEmpty)
                //               Container(
                //                 width: double.infinity,
                //                 padding: const EdgeInsets.all(8),
                //                 decoration: BoxDecoration(
                //                   border: Border.all(color: Color(0xFF7098DD), width: 1),
                //                   borderRadius: BorderRadius.circular(6),
                //                 ),
                //                 child: Text(
                //                   item["comments"],
                //                   style: const TextStyle(fontSize: 12),
                //                 ),
                //               )
                //           else
                //               const Text( "N/A", style: TextStyle(fontSize: 12), ),
                //           ],
                //       )
              ],
            ),
          ),
        );
      },
    );
  }

  Widget _buildComments(String title, String value) {
    // Define character limits based on title
    Map<String, int> limits = {
      // "Special Request:": 30,
      "Comments:": 20,
      // Add more keys and limits if needed
    };

    int limit = limits[title] ?? 50; // Default limit if title not found
    bool exceedsLimit = value.length > limit;

    String wrapText(String text, int maxLineLength) {
      final pattern = RegExp('.{1,$maxLineLength}(\\s+|\$)');
      return pattern.allMatches(text).map((m) => m.group(0)!).join('\n');
    }

    return Row(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        Expanded(
          child:
              exceedsLimit
                  ? Tooltip(
                    message: wrapText(value, 50),
                    decoration: BoxDecoration(
                      color: Colors.grey.shade200, // Black background
                      borderRadius: BorderRadius.circular(6),
                    ),
                    textStyle: TextStyle(
                      color: Colors.black,
                    ), // Tooltip text color
                    padding: EdgeInsets.all(8),
                    preferBelow: false,
                    child: Text(
                      value.substring(0, limit) + "...",
                      style: GoogleFonts.poppins(
                        fontSize: 12,
                        fontWeight: FontWeight.w600,
                      ),
                      overflow: TextOverflow.ellipsis,
                    ),
                  )
                  : Text(
                    value,
                    style: GoogleFonts.poppins(
                      fontSize: 12,
                      fontWeight: FontWeight.w600,
                    ),
                  ),
        ),
      ],
    );
  }

  // Helper widget
  Widget _buildInfoColumn(String label, String value) {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        Text(
          label,
          style: GoogleFonts.poppins(
            fontSize: 12,
            fontWeight: FontWeight.bold,
            color: Colors.black87,
          ),
        ),
        SizedBox(height: 4),
        Text(
          value,
          style: GoogleFonts.poppins(fontSize: 12, color: Colors.black87),
        ),
      ],
    );
  }

  Widget _buildRow(String title, String value) {
    // Define character limits based on title
    Map<String, int> limits = {
      // "Special Request:": 30,
      "Comments:": 10,
      // Add more keys and limits if needed
    };

    int limit = limits[title] ?? 50; // Default limit if title not found
    bool exceedsLimit = value.length > limit;

    String wrapText(String text, int maxLineLength) {
      final pattern = RegExp('.{1,$maxLineLength}(\\s+|\$)');
      return pattern.allMatches(text).map((m) => m.group(0)!).join('\n');
    }

    return Row(
      crossAxisAlignment: CrossAxisAlignment.start,

      children: [
        SizedBox(
          // color: Colors.yellowAccent.shade100,
          width: 100,
          child: Text(
            title,
            style: GoogleFonts.poppins(
              fontSize: 12,
              fontWeight: FontWeight.w600,
            ),
          ),
        ),
        SizedBox(width: 5),
        // Expanded(child: Text(value, style: TextStyle(fontSize: 12))),
        Expanded(
          child:
              exceedsLimit
                  ? Tooltip(
                    message: wrapText(value, 50),
                    decoration: BoxDecoration(
                      color: Colors.grey.shade200, // Black background
                      borderRadius: BorderRadius.circular(6),
                    ),
                    textStyle: TextStyle(
                      color: Colors.black,
                    ), // Tooltip text color
                    padding: EdgeInsets.all(8),
                    preferBelow: false,
                    child: Text(
                      value.substring(0, limit) + "...",
                      style: TextStyle(fontSize: 12),
                      overflow: TextOverflow.ellipsis,
                    ),
                  )
                  : Text(value, style: TextStyle(fontSize: 12)),
        ),
      ],
    );
  }

  Widget _buildDateTimeRow(String title, String date, String time) {
    return Row(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        SizedBox(
          width: 100,
          child: Text(
            title,
            style: GoogleFonts.poppins(
              fontSize: 12,
              fontWeight: FontWeight.w600,
            ),
          ),
        ),
        SizedBox(width: 5),
        Expanded(
          child: Text("$date, $time", style: GoogleFonts.poppins(fontSize: 12)),
        ),
      ],
    );
  }
}
