import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:frontend/providers/auth.dart';
import 'package:frontend/providers/game_messages.dart';
import 'package:frontend/providers/web_socket.dart';
import 'package:go_router/go_router.dart';
import 'package:logging/logging.dart';

final logger = Logger('GameRoomHome');

class GameRoomHome extends ConsumerStatefulWidget {
  const GameRoomHome({super.key, this.roomUuid});

  final String? roomUuid;

  @override
  ConsumerState<GameRoomHome> createState() => _GameRoomHomeState();
}

class _GameRoomHomeState extends ConsumerState<GameRoomHome> {
  @override
  void initState() {
    WidgetsBinding.instance.addPostFrameCallback((_) => ref.read(webSocketNotifierProvider.notifier).connect());
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    final jwt = ref.watch(jwtBodyProvider);
    if (jwt == null || jwt.roomUuid != widget.roomUuid) {
      logger.fine('Tried to open room, but not authenticated / wrong room');
      // return home
      context.go('/');
    }

    final connection = ref.watch(webSocketNotifierProvider).valueOrNull;

    ref.listen(
      gameMessageNotifierProvider,
      (previous, next) {
        print('Got message: $next');
      },
    );
    // enstablish ws connection at /room/roomCode/ws and save to gameMessageProvider
    return Scaffold(
      body: Column(
        children: [
          Text('Authenticated.'),
          Text('Welcome to room ${widget.roomUuid}'),
          ElevatedButton(
              onPressed: connection == null
                  ? null
                  : () {
                      connection.add('Test message');
                    },
              child: Text('Send message on socket')),
        ],
      ),
    );
  }
}