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_manufactorers.dart';
import 'package:pharmacy_mobile/widgets/button_widget.dart';
import 'package:pharmacy_mobile/widgets/form_border_widget2.dart';
import 'package:pharmacy_mobile/widgets/input_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 AddManufactorerPage extends StatefulWidget {
  const AddManufactorerPage({super.key});

  @override
  State<AddManufactorerPage> createState() => _AddManufactorerPageState();
}

class _AddManufactorerPageState extends State<AddManufactorerPage> {
  final _formKey = GlobalKey<FormState>();
  final _nameController = TextEditingController();
  final _addressController = TextEditingController();
  final _refManufactorers = RefManufactorers();

  late bool _isLoading = false;

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

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

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

        final post = await _refManufactorers.postManufactorer(_nameController.text, _addressController.text);

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

          WidgetsBinding.instance.addPostFrameCallback((_) {
            if (mounted) {
              context.push('/main');
            }
          });
        }
      } 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() {
    _nameController.dispose();
    _addressController.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 Manufactorer',
              title: true,
            ),
            const Gap(16),
            FormBorderWidget2(
                color: 'blue',
                child: Form(
                    key: _formKey,
                    child: Column(
                      children: [
                        InputWidget(label: 'Name', controller: _nameController),
                        const Gap(16),
                        InputWidget(label: 'Address', controller: _addressController),
                        const Gap(32),
                        if (_isLoading)
                          const Center(child: CircularProgressIndicator(color: Colors.white))
                        else
                          ButtonWidget(text: 'Save Manufactorer', onPressed: _saveManufactorer)
                      ],
                    )))
          ],
        ),
      )),
    );
  }
}
