import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:island/models/post.dart';
import 'package:island/services/compose_storage_db.dart';
import 'package:island/widgets/post/compose_shared.dart';
import 'package:island/widgets/post/draft_manager.dart';
import 'package:material_symbols_icons/symbols.dart';
import 'package:styled_widget/styled_widget.dart';

class ComposeToolbar extends HookConsumerWidget {
  final ComposeState state;
  final SnPost? originalPost;

  const ComposeToolbar({super.key, required this.state, this.originalPost});

  @override
  Widget build(BuildContext context, WidgetRef ref) {
    void pickPhotoMedia() {
      ComposeLogic.pickPhotoMedia(ref, state);
    }

    void pickVideoMedia() {
      ComposeLogic.pickVideoMedia(ref, state);
    }

    void addAudio() {
      ComposeLogic.recordAudioMedia(ref, state, context);
    }

    void linkAttachment() {
      ComposeLogic.linkAttachment(ref, state, context);
    }

    void saveDraft() {
      ComposeLogic.saveDraft(ref, state);
    }

    void pickPoll() {
      ComposeLogic.pickPoll(ref, state, context);
    }

    void showDraftManager() {
      showModalBottomSheet(
        context: context,
        isScrollControlled: true,
        builder:
            (context) => DraftManagerSheet(
              onDraftSelected: (draftId) {
                final draft = ref.read(composeStorageNotifierProvider)[draftId];
                if (draft != null) {
                  state.titleController.text = draft.title ?? '';
                  state.descriptionController.text = draft.description ?? '';
                  state.contentController.text = draft.content ?? '';
                  state.visibility.value = draft.visibility;
                }
              },
            ),
      );
    }

    final colorScheme = Theme.of(context).colorScheme;

    return Material(
      elevation: 4,
      color: Theme.of(context).colorScheme.surfaceContainerLow,
      child: Center(
        child: ConstrainedBox(
          constraints: const BoxConstraints(maxWidth: 560),
          child: Row(
            children: [
              IconButton(
                onPressed: pickPhotoMedia,
                tooltip: 'addPhoto'.tr(),
                icon: const Icon(Symbols.add_a_photo),
                color: colorScheme.primary,
              ),
              IconButton(
                onPressed: pickVideoMedia,
                tooltip: 'addVideo'.tr(),
                icon: const Icon(Symbols.videocam),
                color: colorScheme.primary,
              ),
              IconButton(
                onPressed: addAudio,
                tooltip: 'addAudio'.tr(),
                icon: const Icon(Symbols.mic),
                color: colorScheme.primary,
              ),
              IconButton(
                onPressed: linkAttachment,
                icon: const Icon(Symbols.attach_file),
                tooltip: 'linkAttachment'.tr(),
                color: colorScheme.primary,
              ),
              // Poll button with visual state when a poll is linked
              ListenableBuilder(
                listenable: state.pollId,
                builder: (context, _) {
                  return IconButton(
                    onPressed: pickPoll,
                    icon: const Icon(Symbols.how_to_vote),
                    tooltip: 'poll'.tr(),
                    color: colorScheme.primary,
                    style: ButtonStyle(
                      backgroundColor: WidgetStatePropertyAll(
                        state.pollId.value != null
                            ? colorScheme.primary.withOpacity(0.15)
                            : null,
                      ),
                    ),
                  );
                },
              ),
              const Spacer(),
              if (originalPost == null && state.isEmpty)
                IconButton(
                  icon: const Icon(Symbols.draft),
                  color: colorScheme.primary,
                  onPressed: showDraftManager,
                  tooltip: 'drafts'.tr(),
                )
              else if (originalPost == null)
                IconButton(
                  icon: const Icon(Symbols.save),
                  color: colorScheme.primary,
                  onPressed: saveDraft,
                  onLongPress: showDraftManager,
                  tooltip: 'saveDraft'.tr(),
                ),
            ],
          ).padding(
            bottom: MediaQuery.of(context).padding.bottom + 16,
            horizontal: 16,
            top: 8,
          ),
        ),
      ),
    );
  }
}
