import 'package:gap/gap.dart';
import 'package:flutter/material.dart';
import 'package:internet_connection_checker/internet_connection_checker.dart';
import 'package:pharmacy_mobile/functions/checkexisting_function.dart';
import 'package:pharmacy_mobile/tables/ref_types.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';
import 'package:go_router/go_router.dart';

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

  @override
  State<AddTypePage> createState() => _AddTypePageState();
}

class _AddTypePageState extends State<AddTypePage> {
  final _formKey = GlobalKey<FormState>();
  final _typeController = TextEditingController();
  final _refTypes = RefTypes();

  bool _isLoading = false;

  void _saveType() async {
    setState(() => _isLoading = true);
    try {
      if (await InternetConnectionChecker.instance.hasConnection) {
        final existing = await checkExisting(_refTypes, _typeController);

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

        final post = await _refTypes.postType(_typeController.text);

        if (post && mounted) {
          showNotification(context, 'Medicine type saved', 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
  void dispose() {
    _typeController.dispose();

    super.dispose();
  }

  @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 Medicine Type',
                title: true,
              ),
              const Gap(16),
              FormBorderWidget2(
                color: 'blue',
                child: Form(
                    key: _formKey,
                    child: Center(
                      child: Column(
                        children: [
                          InputFormWidget(label: 'Type Name', controller: _typeController),
                          const Gap(32),
                          // if (_isLoading)
                          //   const Center(child: CircularProgressIndicator(color: Colors.white))
                          // else
                          //   ButtonWidget(text: 'Save Type', onPressed: _saveType)
                          ButtonWithProgressWidget(
                              trigger: _isLoading,
                              progressText: 'Adding Type',
                              buttonText: 'Save',
                              onPressed: _saveType)
                        ],
                      ),
                    )),
              )
            ],
          ),
        ),
      ),
    );
  }
}
