import 'package:flutter/material.dart';

import 'package:provider/provider.dart';

import 'package:pweb/providers/wallets.dart';
import 'package:pweb/widgets/error/snackbar.dart';

import 'package:pweb/generated/i18n/app_localizations.dart';


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

  @override
  State<WalletEditHeader> createState() => _WalletEditHeaderState();
}

class _WalletEditHeaderState extends State<WalletEditHeader> {
  bool _isEditing = false;
  late TextEditingController _controller;

  @override
  void initState() {
    super.initState();
    _controller = TextEditingController();
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    final provider = context.watch<WalletsProvider>();
    final wallet = provider.selectedWallet;
    final loc = AppLocalizations.of(context)!;
    final messanger = ScaffoldMessenger.of(context);

    if (wallet == null) {
      return SizedBox.shrink();
    }

    final theme = Theme.of(context);

    if (!_isEditing) {
      _controller.text = wallet.name;
    }

    return Row(
      spacing: 8,
      mainAxisAlignment: MainAxisAlignment.spaceBetween,
      children: [
        Expanded(
          child: !_isEditing
              ? Row(
                  children: [
                    Expanded(
                      child: Text(
                        wallet.name,
                        style: theme.textTheme.headlineMedium!.copyWith(
                          fontWeight: FontWeight.bold,
                        ),
                      ),
                    ),
                    IconButton(
                      icon: const Icon(Icons.edit),
                      onPressed: () {
                        setState(() {
                          _isEditing = true;
                        });
                      },
                    ),
                  ],
                )
              : Row(
                  children: [
                    Expanded(
                      child: TextFormField(
                        controller: _controller,
                        decoration: InputDecoration(
                          border: OutlineInputBorder(),
                          isDense: true,
                          hintText: loc.walletName,
                        ),
                      ),
                    ),
                    IconButton(
                      icon: const Icon(Icons.check),
                      color: theme.colorScheme.primary,
                      onPressed: () async {
                        await executeActionWithNotification(
                          context: context, 
                          action: () async => await provider.updateWallet(wallet.copyWith(name: _controller.text)), 
                          errorMessage: 'Failed to update wallet name',
                          successMessage: 'Wallet name saved',
                        );
                        setState(() {
                          _isEditing = false;
                        });
                      },
                    ),
                    IconButton(
                      icon: const Icon(Icons.close),
                      onPressed: () {
                        _controller.text = wallet.name;
                        setState(() {
                          _isEditing = false;
                        });
                      },
                    ),
                  ],
                ),
        ),
      ],
    );
  }
}
