import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:okane/database/collections/expense_category.dart';
import 'package:okane/database/database.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: "Category name"),
                  controller: _categoryNameController,
                ),
                Row(
                  children: [
                    Spacer(),
                    OutlinedButton(
                      onPressed: () async {
                        final category =
                            ExpenseCategory()
                              ..name = _categoryNameController.text;
                        await upsertExpenseCategory(category);
                        _categoryNameController.text = "";
                        Navigator.of(context).pop(category);
                      },
                      child: Text("Add"),
                    ),
                  ],
                ),
              ],
            ),
          ),
    );
  }
}