import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:frontend/Screens/group/group.dart';
import 'package:go_router/go_router.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:http/http.dart' as http;
import 'package:responsive_builder/responsive_builder.dart';

import '../../config/apiUrl.dart';
import '../../routes/custom_appBar.dart';
import '../../routes/custom_drawer.dart';
import '../../services/apiService.dart';
import '../../utils/auth_utils.dart';

class PolicyListBackup extends StatefulWidget {
  @override
  _PolicyListBackupState createState() => _PolicyListBackupState();
}

class _PolicyListBackupState extends State<PolicyListBackup> {
  final ApiService apiService = ApiService();

  List<dynamic>? apiAllGroups;
  Color? layoutColor;
  Color? bodyColor;

  @override
  void initState() {
    super.initState();

    WidgetsBinding.instance.addPostFrameCallback((_) {
      loadAllGroups();
      loadInitialData();
    });
  }

  void loadInitialData() async {
    String? layoutString = await getLayoutColor();
    String? bodyStringColor = await getBodyColor();

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

      bodyColor =
      bodyStringColor != null
          ? Color(int.parse(bodyStringColor))
          : Colors.white;
    });
  }

  Future<void> loadAllGroups() async {
    try {
      final result = await apiService.fetchAllPolicy();

      // Sort by policy_id descending (latest first)
      result.sort((a, b) {
        int idA = int.tryParse(a['policy_id'].toString()) ?? 0;
        int idB = int.tryParse(b['policy_id'].toString()) ?? 0;
        return idB.compareTo(idA); // latest first
      });

      setState(() {
        apiAllGroups = result;
      });
      print("Fetched services: $apiAllGroups");
    } catch (e) {
      print('Error fetching role list: $e');
    }
  }

  void handleActiveStatus(
      Map<String, dynamic> policyData,
      String policyId,
      String currentStatus,
      ) async {
    print("Toggling user status - $policyId (Current: $currentStatus)");

    final String apiUrlData =
        '$apiUrl/api/policy/createOrUpdate'; // API for updating user
    final String? token = await getToken();

    if (token == null) {
      print("Error: Token not found");
      return;
    }

    // Toggle status: If active ("1"), set to inactive ("0"); otherwise, activate ("1")
    String newStatus = (currentStatus == "1") ? "0" : "1";

    print("STatus 1 - $newStatus");

    final int? selectedPolicyId;

    if (policyId.isNotEmpty) {
      selectedPolicyId = int.tryParse(policyId);
      policyData['policy_id'] = selectedPolicyId; // Add only if updating
      policyData['is_active'] = newStatus; // Add only if updating
    }

    try {
      final response = await http.post(
        Uri.parse(apiUrlData),
        headers: {
          'Authorization': 'Bearer $token',
          'Content-Type': 'application/json',
        },
        body: jsonEncode(policyData), // Convert map to JSON
      );

      if (response.statusCode == 200) {
        print("policyData submitted successfully!");
        print("Response: ${response.body}");

        loadAllGroups();
      } else {
        print("Failed to submit policyData. Status: ${response.statusCode}");
        print("Error: ${response.body}");
      }
    } catch (e) {
      print(" Error submitting policyData: $e");
    }
  }

  void deletePolicy(Map<String, dynamic> policydata, policyId, status) {
    print("policyId : $policyId");
    print("policystatus: $status");
    print("policysData: $policydata");

    // handleActiveStatus(groupdata, groupId, status);
    print("Calling handleActiveStatus with: id=$policyId, status=$status");
    handleActiveStatus(policydata, policyId.toString(), status.toString());
  }

  // Future<void> deleteGroupFromApi(int groupId) async {
  //   try {
  //     await apiService.deleteGroup(groupId); // your delete API call
  //     deleteGroup(groupId); // remove from UI list
  //   } catch (e) {
  //     print('Error deleting group: $e');
  //   }
  // }'

  @override
  Widget build(BuildContext context) {
    return ResponsiveBuilder(
      builder: (context, sizingInfo) {
        bool isDesktop =
            sizingInfo.deviceScreenType == DeviceScreenType.desktop;

        return Scaffold(
          backgroundColor: Color(0xFFf5f5f5),
          appBar: CustomAppBar(isDesktop: isDesktop),
          drawer: CustomDrawer(isDesktop: false),
          body: Padding(
            padding:
            isDesktop
                ? EdgeInsets.symmetric(
              horizontal:
              MediaQuery.of(context).size.width *
                  0.1, // 30% of screen width as horizontal padding
              vertical:
              MediaQuery.of(context).size.height *
                  0, // 5% of screen height as vertical padding
            )
                : EdgeInsets.all(0),
            child: Row(
              children: [
                // if (isDesktop) CustomDrawer(isDesktop: true),
                Expanded(child: buildGroupList(isDesktop)),
              ],
            ),
          ),
        );
      },
    );
  }

  Widget buildGroupList(bool isDesktop) {
    return Container(
      margin: isDesktop ? const EdgeInsets.only(top: 10.0, bottom: 10.0) : null,
      padding: const EdgeInsets.only(left: 10, right: 10, top: 8),
      decoration: BoxDecoration(
        color: isDesktop ? Colors.white : Color(0xFFFCFCFC),
      ),
      // decoration: BoxDecoration(
      //     // color: Colors.amber,
      //     color: Color(0xFFE1F5FE),
      //     // color: bodyColor,
      //     border: Border.all(
      //         // color: Color(0xFFF7F7FB),
      //         color: Colors.white,
      //         width: 3.5)),
      child: buildGroupListLayout(isDesktop),
    );
  }

  Widget buildGroupListLayout(bool isDesktop) {
    return Container(
      // margin: isDesktop
      //     ? EdgeInsets.all(10.0)
      //     : EdgeInsets.only(left: 20.0, bottom: 20.0, top: 10.0, right: 20.0),
      // padding: const EdgeInsets.all(10),
      height:
      isDesktop
          ? MediaQuery.of(context).size.height * 0.98
          : MediaQuery.of(context).size.height,
      // decoration: BoxDecoration(
      //   border: isDesktop
      //       ? Border.all(
      //           width: 2,
      //           color: Colors.white,
      //           // color: Color(0xFFF7F7FB),
      //         )
      //       : null,
      //   color: Colors.white,
      //   // color: Color(0xFFF7F7FB),
      //
      //   // color: Colors.amber,
      // ),
      child: Column(
        children: [
          Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: [
              Row(
                children: [
                  Text(
                    'Policy List',
                    style: GoogleFonts.poppins(
                      fontSize: isDesktop ? 16 : 14,
                      fontWeight: FontWeight.w600,
                      color: Colors.black,
                    ),
                  ),
                  IconButton(
                    icon: const Icon(Icons.keyboard_arrow_down),
                    onPressed: () {},
                  ),
                ],
              ),
              ElevatedButton(
                style: ElevatedButton.styleFrom(
                  foregroundColor: Colors.white,
                  backgroundColor: Color(0xFF114D8B),
                  shape: RoundedRectangleBorder(
                    borderRadius: BorderRadius.circular(8),
                    // side: BorderSide(color: , width: 1),
                  ),
                  padding: EdgeInsets.symmetric(horizontal: 20, vertical: 12),
                ),
                onPressed: () async {
                  // List<dynamic> users = await futureUsers;
                  context.go('/Policy');
                },
                child: Row(
                  children: [
                    Text(
                      'New Policy',
                      style: GoogleFonts.poppins(fontSize: 12),
                    ),
                    SizedBox(width: 5),
                    Icon(Icons.add_circle_outline_rounded, color: Colors.white),
                  ],
                ),
              ),
            ],
          ),
          SizedBox(height: 5),
          Row(
            children: [
              Expanded(
                child: Container(
                  height: MediaQuery.of(context).size.height * 0.8,
                  padding: const EdgeInsets.all(10),
                  // margin: const EdgeInsets.only(bottom: 10),
                  color: Colors.white,
                  // color: Colors.red.shade100,
                  child: SingleChildScrollView(
                    scrollDirection: Axis.vertical,
                    child: Column(children: [buildGroupListView(isDesktop)]),
                  ),
                ),
              ),
            ],
          ),
        ],
      ),
    );
  }

  // Widget buildGroupListView(bool isDesktop) {
  //   return Container(
  //     child: Text("DAta"),
  //   );
  // }

  Widget buildGroupListView(bool isDesktop) {
    if (apiAllGroups == null || apiAllGroups!.isEmpty) {
      return Center(child: Text("No Policy Found."));
    }

    return ListView.builder(
      shrinkWrap: true,
      physics: NeverScrollableScrollPhysics(),
      itemCount: apiAllGroups!.length,
      itemBuilder: (context, index) {
        final policy = apiAllGroups![index];
        return Card(
          // color: bodyColor,
          // color: Color(0xFFF5F5F5),
          color: Colors.white,
          margin: EdgeInsets.symmetric(vertical: 6, horizontal: 10),
          child: Padding(
            padding: const EdgeInsets.all(12.0),
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                Row(
                  children: [
                    Expanded(
                      flex: 1,
                      child: Text(
                        "Policy Name",
                        style: GoogleFonts.poppins(
                          fontSize: 11.5,
                          fontWeight: FontWeight.w400,
                        ),
                      ),
                    ),
                    Expanded(
                      flex: 1,
                      child: Text(
                        "Policy Type",
                        style: GoogleFonts.poppins(
                          fontSize: 11.5,
                          fontWeight: FontWeight.w400,
                        ),
                      ),
                    ),
                    // Expanded(flex: 1, child: Text("${policy['created_by']}")),
                  ],
                ),
                SizedBox(height: 4),
                Row(
                  children: [
                    Expanded(
                      flex: 1,
                      child: Text(
                        "${policy['name']}",
                        style: GoogleFonts.poppins(
                          fontSize: 13,
                          fontWeight: FontWeight.w600,
                        ),
                      ),
                    ),
                    Expanded(
                      flex: 1,
                      child: Text(
                        policy['domestic'] == "1"
                            ? "Domestic"
                            : "International",
                        style: GoogleFonts.poppins(
                          fontSize: 13,
                          fontWeight: FontWeight.w600,
                        ),
                      ),
                    ),
                    // Expanded(flex: 1, child: Text("${policy['created_by']}")),
                  ],
                ),
                Row(
                  mainAxisAlignment: MainAxisAlignment.end,
                  children: [
                    GestureDetector(
                      onTap: () async {
                        final rawId = policy['policy_id'];
                        final intPolicyId =
                        rawId is int
                            ? rawId
                            : int.tryParse(rawId.toString()) ?? 0;

                        Map<String, dynamic> policyData = await apiService
                            .getSinglePolicy(intPolicyId);

                        print("PolicyDATa: $policyData");

                        context.go("/Policy", extra: policyData);
                      },
                      child: Image.asset(
                        'assets/images/IconsImg/edit.png',
                        width: 20,
                        height: 15,
                      ),
                    ),
                    SizedBox(width: 5),
                    GestureDetector(
                      onTap: () {
                        final idStr = policy['policy_id'];
                        final id = int.tryParse(idStr.toString());

                        if (id == null) {
                          print("group_id is null");
                          return;
                        }
                        final status = policy['is_active'];

                        deletePolicy(policy, id, status);
                      },
                      child: Image.asset(
                        'assets/images/IconsImg/delete.png',
                        width: 20,
                        height: 15,
                      ),
                    ),
                  ],
                ),
              ],
            ),
          ),
        );
      },
    );
  }
}
