import 'package:flutter/material.dart';
import 'package:dio/dio.dart';

class ListViewExample extends StatefulWidget {
  const ListViewExample({Key? key}) : super(key: key);

  @override
  _ListViewExampleState createState() => _ListViewExampleState();
}

class _ListViewExampleState extends State<ListViewExample> {
  List<Map<String, dynamic>> items = [];
  bool isLoading = true;

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

  Future<void> fetchDataFromServer() async {
    final String apiUrl = 'https://aina.company/DIT/KN/getAllReq.php';
    final Map<String, dynamic> queryParams = {
      'apk': 'sdkjq1234wda4dfadf315rFDfhagfgfg',
      'userid': '1',
    };

    final Dio dio = Dio();

    try {
      print('Making request to $apiUrl with $queryParams');
      final response = await dio.post(
        apiUrl,
        options: Options(
          headers: {'Content-Type': 'application/x-www-form-urlencoded'},
        ),
        data: queryParams,
      );

      print('Response status: ${response.statusCode}');
      print('Response body: ${response.data}');

      if (response.statusCode == 200) {
        final List<dynamic> data = response.data;
        setState(() {
          items = List<Map<String, dynamic>>.from(data);
          isLoading = false;
        });
      } else {
        print(
            'Error: Failed to load data from server with status code ${response.statusCode}');
        setState(() {
          isLoading = false;
        });
      }
    } catch (e) {
      print('Error: $e');
      setState(() {
        isLoading = false;
      });
    }
  }

  void _onItemTap(Map<String, dynamic> item) {
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(
        content: Text(
            'REQUEST ID: ${item['requests_id']}, REQUEST STATUS: ${item['requests_status']}, REQUEST STATUS TEXT: ${item['texts_requests']}'),
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Server JSON ListView'),
      ),
      body: isLoading
          ? Center(child: CircularProgressIndicator())
          : items.isEmpty
              ? Center(child: Text('No data available'))
              : ListView.separated(
                  itemCount: items.length,
                  itemBuilder: (context, index) {
                    final item = items[index];
                    return Card(
                      child: ListTile(
                        title: Text('REQUEST ID: ${item['requests_id']}'),
                        subtitle: Text(
                            'REQUEST STATUS: ${item['requests_status']}\nREQUEST STATUS TEXT: ${item['texts_requests']}'),
                        trailing: Icon(Icons.arrow_forward),
                        onTap: () => _onItemTap(item),
                      ),
                    );
                  },
                  separatorBuilder: (context, index) => const Divider(),
                ),
    );
  }
}

void main() {
  runApp(const MaterialApp(
    home: ListViewExample(),
  ));
}