import 'package:fluent_ui/fluent_ui.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:go_router/go_router.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:qr_flutter/qr_flutter.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:starcitizen_doctor/generated/l10n.dart';

import 'server.dart';

part 'server_qr_dialog_ui.g.dart';

@riverpod
class ServerQrState extends _$ServerQrState {
  @override
  bool build() {
    return true;
  }

  BuildContext? _context;

  // ignore: avoid_build_context_in_providers
  void setupContext(BuildContext context) {
    _context = context;
  }

  void popDialog() {
    _context?.pop();
  }
}

class ServerQrDialogUI extends HookConsumerWidget {
  const ServerQrDialogUI({super.key});

  @override
  Widget build(BuildContext context, WidgetRef ref) {
    final serverState = ref.watch(inputMethodServerProvider);

    final urls = serverState.serverAddressText?.split(",") ?? [""];

    final hasMultipleUrls = urls.length > 1;

    final index = useState(0);

    final model = ref.watch(serverQrStateProvider.notifier);

    model.setupContext(context);

    return ContentDialog(
      constraints: BoxConstraints(
        maxWidth: MediaQuery.of(context).size.width * .4,
      ),
      title: makeTitle(context),
      content: Column(
        mainAxisSize: MainAxisSize.min,
        crossAxisAlignment: CrossAxisAlignment.center,
        children: [
          SizedBox(width: double.infinity, height: 12),
          if (hasMultipleUrls) ...[
            Text(S.current.input_method_ip_address_not_found),
          ] else
            Text(
              S.current.input_method_scan_qr_code,
              style: TextStyle(color: Colors.white.withValues(alpha: .8)),
            ),
          SizedBox(height: 24),
          Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: [
              if (hasMultipleUrls)
                IconButton(
                    icon: Icon(FluentIcons.chevron_left),
                    onPressed: () {
                      index.value = (index.value - 1) % urls.length;
                    }),
              SizedBox(width: 24),
              Container(
                color: Colors.white,
                child: QrImageView(
                  data: urls[index.value],
                  size: 200,
                  padding: EdgeInsets.all(12),
                ),
              ),
              SizedBox(width: 24),
              if (hasMultipleUrls)
                IconButton(
                    icon: Icon(FluentIcons.chevron_right),
                    onPressed: () {
                      index.value = (index.value + 1) % urls.length;
                    }),
            ],
          ),
          SizedBox(height: 12),
          Text(
            hasMultipleUrls
                ? "${urls[index.value]} (${index.value + 1} / ${urls.length})"
                : urls[index.value],
            style: TextStyle(
                fontSize: 13, color: Colors.white.withValues(alpha: .6)),
          ),
        ],
      ),
    );
  }

  Widget makeTitle(BuildContext context) {
    return Row(
      children: [
        IconButton(
            icon: const Icon(
              FluentIcons.back,
              size: 22,
            ),
            onPressed: () {
              context.pop();
            }),
        const SizedBox(width: 12),
        Text(S.current.input_method_service_qr_code),
      ],
    );
  }
}
