import 'dart:io';
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';

import '../../consts.dart';


// Saves all measurements to a file on the users mobile device
Future<void> _exportIceData() async {
  final directory = await getExternalStorageDirectory();
  final file = File('${directory?.path}/ice_data_$selectedLake.json');

  // Convert JSON data to string
  final jsonString = jsonEncode(selectedMeasurements);

  // Write JSON data to file
  await file.writeAsString(jsonString);
}


// Display a progress indicator while JSON data is being downloaded
void showProgressIndicator(BuildContext context) {
  BuildContext? dialogContext;

  showDialog(
    context: context,
    builder: (BuildContext context) {
      dialogContext = context;
      return WillPopScope(
        onWillPop: () async => false, // Prevent dialog from being closed by user
        child: const AlertDialog(
          content: Column(
            mainAxisSize: MainAxisSize.min,
            children: [
              CircularProgressIndicator(), // Progress indicator
              SizedBox(height: 20),
              Text('Exporting JSON data...'),
            ],
          ),
        ),
      );
    },
  );

  // Ensure that the progress indicator runs for at lest 1 second
  Future.delayed(const Duration(seconds: 1), () {
    try { // Download JSON data
      _exportIceData();
      ScaffoldMessenger.of(context).showSnackBar(
        const SnackBar(content: Text('Downloaded ice data as JSON')),
      );
    } catch (e) {
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('Failed to export JSON data: $e')),
      );
    } finally {
      if (dialogContext != null) {
        // Add 2 second delay before closing dialog
        Future.delayed(const Duration(seconds: 2), () {
          Navigator.of(dialogContext!).pop();
          Navigator.of(context).pop();
        });
      }
    }
  });
}