import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:get_it/get_it.dart';
import 'package:okane/database/database.dart';
import 'package:okane/i18n/strings.g.dart';
import 'package:okane/ui/state/core.dart';
import 'package:okane/ui/utils.dart';
import 'package:okane/ui/widgets/add_template.dart';

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

  @override
  State<TemplateListPage> createState() => TemplateListState();
}

class TemplateListState extends State<TemplateListPage> {
  @override
  Widget build(BuildContext context) {
    return BlocBuilder<CoreCubit, CoreState>(
      builder: (context, state) {
        final account = GetIt.I.get<CoreCubit>().activeAccount;
        final nonRecurringTemplates =
            state.transactionTemplates.where((t) => !t.recurring).toList();
        return Stack(
          children: [
            CustomScrollView(
              slivers: [
                SliverToBoxAdapter(
                  child: Text(t.pages.templates.nonRecurring.title),
                ),
                SliverList.builder(
                  itemCount: nonRecurringTemplates.length,
                  itemBuilder: (context, index) {
                    final template = nonRecurringTemplates[index];
                    return ListTile(
                      title: Text(template.name),
                      trailing: IconButton(
                        icon: Icon(Icons.delete),
                        color: Colors.red,
                        onPressed: () async {
                          final result = await confirm(
                            context,
                            t.pages.templates.removeTemplate.title,
                            t.pages.templates.removeTemplate.body(
                              name: template.name,
                            ),
                          );
                          if (!result) {
                            return;
                          }

                          await deleteTransactionTemplate(template);
                        },
                      ),
                    );
                  },
                ),
                SliverToBoxAdapter(
                  child: Text(t.pages.templates.recurring.title),
                ),
                SliverList.builder(
                  itemCount: state.recurringTransactions.length,
                  itemBuilder: (context, index) {
                    final template = state.recurringTransactions[index];
                    return ListTile(
                      title: Text(template.template.value!.name),
                      trailing: IconButton(
                        icon: Icon(Icons.delete, color: Colors.red),
                        onPressed: () async {
                          final result = await confirm(
                            context,
                            t.pages.templates.removeTemplate.title,
                            t.pages.templates.removeTemplate.body(
                              name: template.template.value!.name,
                            ),
                          );
                          if (!result) {
                            return;
                          }

                          await deleteRecurringTransactionTemplate(template);
                        },
                      ),
                    );
                  },
                ),
              ],
            ),
            Positioned(
              right: 16,
              bottom: 16,
              child: FloatingActionButton(
                onPressed:
                    account == null
                        ? () {}
                        : () {
                          showDialogOrModal(
                            context: context,
                            builder:
                                (ctx) => AddTransactionTemplateWidget(
                                  activeAccountItem: account,
                                  onAdd: () {
                                    setState(() {});
                                    Navigator.of(context).pop();
                                  },
                                ),
                            showDragHandle: true,
                          );
                        },
                child: Icon(Icons.add),
              ),
            ),
          ],
        );
      },
    );
  }
}