import 'package:flutter/material.dart';
import 'package:gap/gap.dart';
import 'package:go_router/go_router.dart';
import 'package:internet_connection_checker/internet_connection_checker.dart';
import 'package:pharmacy_mobile/functions/checkexisting_function.dart';
import 'package:pharmacy_mobile/tables/ref_distributors.dart';
import 'package:pharmacy_mobile/widgets/buttonwithprogress_widget.dart';
import 'package:pharmacy_mobile/widgets/form_border_widget2.dart';
import 'package:pharmacy_mobile/widgets/input_form_widget.dart';
import 'package:pharmacy_mobile/widgets/page_background_widget.dart';
import 'package:pharmacy_mobile/widgets/snackbar_widget.dart';
import 'package:pharmacy_mobile/widgets/text_widget.dart';
import 'package:pharmacy_mobile/widgets/title_widget.dart';

class AddDistributorPage extends StatefulWidget {
  const AddDistributorPage({super.key});

  @override
  State<AddDistributorPage> createState() => _AddDistributorPageState();
}

class _AddDistributorPageState extends State<AddDistributorPage> {
  final _formKey = GlobalKey<FormState>();
  final _nameController = TextEditingController();
  final _addressController = TextEditingController();
  final _refdistributors = RefDistributors();

  late bool _isLoading = false;

  void _saveDistributor() async {
    setState(() => _isLoading = true);

    try {
      if (await InternetConnectionChecker.instance.hasConnection) {
        final existing = await checkExisting(_refdistributors, _nameController);

        if (existing && mounted) {
          showNotification(context, 'Distributor already listed', false);
          return;
        }

        final post = await _refdistributors.postDistributor(_nameController.text, _addressController.text);

        if (post && mounted) {
          showNotification(context, 'Distributor added to list', true);

          WidgetsBinding.instance.addPostFrameCallback((_) {
            if (mounted) {
              context.pop();
            }
          });
        }
      } else {
        if (mounted) {
          showNotification(context, 'Error: No Internet Connection', false);
        }
      }
    } catch (e) {
      if (mounted) {
        showNotification(context, 'Error: $e', false);
      }
    } finally {
      setState(() => _isLoading = false);
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: PageBackgroundWidget(
          child: Center(
        child: Column(
          children: [
            const Gap(96),
            const TitleWidget(
              firstTextSize: 14,
              secondTextSize: 24,
              logoSize: 90,
            ),
            const Gap(32),
            const TextWidget(
              text: 'Add Distributor',
              title: true,
            ),
            const Gap(16),
            FormBorderWidget2(
                color: 'blue',
                child: Form(
                    key: _formKey,
                    child: Column(
                      children: [
                        InputFormWidget(label: 'Name', controller: _nameController),
                        const Gap(16),
                        InputFormWidget(label: 'Address', controller: _addressController),
                        const Gap(32),
                        ButtonWithProgressWidget(
                            trigger: _isLoading,
                            progressText: 'Adding Distributor',
                            buttonText: 'Save',
                            onPressed: _saveDistributor)
                      ],
                    )))
          ],
        ),
      )),
    );
  }
}
