import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/modules/album/providers/album_viewer.provider.dart';
import 'package:openapi/api.dart';

class AlbumViewerEditableTitle extends HookConsumerWidget {
  final AlbumResponseDto albumInfo;
  final FocusNode titleFocusNode;
  const AlbumViewerEditableTitle({
    Key? key,
    required this.albumInfo,
    required this.titleFocusNode,
  }) : super(key: key);

  @override
  Widget build(BuildContext context, WidgetRef ref) {
    final titleTextEditController =
        useTextEditingController(text: albumInfo.albumName);
    final isDarkTheme = Theme.of(context).brightness == Brightness.dark;

    void onFocusModeChange() {
      if (!titleFocusNode.hasFocus && titleTextEditController.text.isEmpty) {
        ref.watch(albumViewerProvider.notifier).setEditTitleText("Untitled");
        titleTextEditController.text = "Untitled";
      }
    }

    useEffect(
      () {
        titleFocusNode.addListener(onFocusModeChange);
        return () {
          titleFocusNode.removeListener(onFocusModeChange);
        };
      },
      [],
    );

    return TextField(
      onChanged: (value) {
        if (value.isEmpty) {
        } else {
          ref.watch(albumViewerProvider.notifier).setEditTitleText(value);
        }
      },
      focusNode: titleFocusNode,
      style: const TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
      controller: titleTextEditController,
      onTap: () {
        FocusScope.of(context).requestFocus(titleFocusNode);

        ref
            .watch(albumViewerProvider.notifier)
            .setEditTitleText(albumInfo.albumName);
        ref.watch(albumViewerProvider.notifier).enableEditAlbum();

        if (titleTextEditController.text == 'Untitled') {
          titleTextEditController.clear();
        }
      },
      decoration: InputDecoration(
        contentPadding: const EdgeInsets.symmetric(horizontal: 8, vertical: 8),
        suffixIcon: titleFocusNode.hasFocus
            ? IconButton(
                onPressed: () {
                  titleTextEditController.clear();
                },
                icon: Icon(
                  Icons.cancel_rounded,
                  color: Theme.of(context).primaryColor,
                ),
                splashRadius: 10,
              )
            : null,
        enabledBorder: OutlineInputBorder(
          borderSide: const BorderSide(color: Colors.transparent),
          borderRadius: BorderRadius.circular(10),
        ),
        focusedBorder: OutlineInputBorder(
          borderSide: const BorderSide(color: Colors.transparent),
          borderRadius: BorderRadius.circular(10),
        ),
        focusColor: Colors.grey[300],
        fillColor: isDarkTheme
            ? const Color.fromARGB(255, 32, 33, 35)
            : Colors.grey[200],
        filled: titleFocusNode.hasFocus,
        hintText: 'share_add_title'.tr(),
      ),
    );
  }
}
