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 { final ApiService apiService = ApiService(); List? 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 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 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 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 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 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 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, ), ), ], ), ], ), ), ); }, ); } }