import 'package:drift/drift.dart' show Value;
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:get_it/get_it.dart';
import 'package:okane/database/sqlite.dart';
import 'package:okane/i18n/strings.g.dart';
import 'package:okane/ui/state/core.dart';

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

  @override
  AddExpenseCategoryState createState() => AddExpenseCategoryState();
}

class AddExpenseCategoryState extends State<AddExpenseCategory> {
  final TextEditingController _categoryNameController = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return BlocBuilder<CoreCubit, CoreState>(
      builder:
          (context, state) => ConstrainedBox(
            constraints: BoxConstraints(maxHeight: 300),
            child: Column(
              mainAxisSize: MainAxisSize.min,
              children: [
                ListView.builder(
                  itemCount: state.expenseCategories.length,
                  shrinkWrap: true,
                  itemBuilder:
                      (context, index) => ListTile(
                        title: Text(state.expenseCategories[index].name),
                        onTap: () {
                          _categoryNameController.text = "";
                          Navigator.of(
                            context,
                          ).pop(state.expenseCategories[index]);
                        },
                      ),
                ),

                TextField(
                  decoration: InputDecoration(
                    hintText: t.common.expenseCategory.name,
                  ),
                  controller: _categoryNameController,
                ),
                Row(
                  children: [
                    Spacer(),
                    OutlinedButton(
                      onPressed: () async {
                        final category = await GetIt.I
                            .get<OkaneDatabase>()
                            .expenseCategoriesDao
                            .upsertCategory(
                              ExpenseCategoriesCompanion(
                                name: Value(_categoryNameController.text),
                              ),
                            );
                        _categoryNameController.text = "";
                        Navigator.of(context).pop(category);
                      },
                      child: Text(t.modals.add),
                    ),
                  ],
                ),
              ],
            ),
          ),
    );
  }
}