import 'package:farolero/servicios/servicio_notas.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:shared_preferences/shared_preferences.dart';

void main() {
  TestWidgetsFlutterBinding.ensureInitialized();

  setUp(() {
    SharedPreferences.setMockInitialValues({});
  });

  test('guarda y carga notas scoped por partida y autor', () async {
    await ServicioNotas.guardarNotasPartida(
      partidaId: 'sala-1',
      autorJugadorId: 'jugador-a',
      notasPorJugador: {'jugador-b': 'Dijo perro demasiado rápido'},
      notaLibre: 'Sospecho de B',
    );

    final datos = await ServicioNotas.cargarNotasPartida(
      partidaId: 'sala-1',
      autorJugadorId: 'jugador-a',
    );

    expect(datos['notas'], {'jugador-b': 'Dijo perro demasiado rápido'});
    expect(datos['notaLibre'], 'Sospecho de B');
  });

  test('no mezcla notas entre partidas ni autores', () async {
    await ServicioNotas.guardarNotasPartida(
      partidaId: 'sala-1',
      autorJugadorId: 'jugador-a',
      notasPorJugador: {'jugador-b': 'nota sala 1'},
      notaLibre: 'libre 1',
    );
    await ServicioNotas.guardarNotasPartida(
      partidaId: 'sala-2',
      autorJugadorId: 'jugador-a',
      notasPorJugador: {'jugador-b': 'nota sala 2'},
      notaLibre: 'libre 2',
    );

    final otraPartida = await ServicioNotas.cargarNotasPartida(
      partidaId: 'sala-2',
      autorJugadorId: 'jugador-a',
    );
    final otroAutor = await ServicioNotas.cargarNotasPartida(
      partidaId: 'sala-1',
      autorJugadorId: 'jugador-c',
    );

    expect(otraPartida['notas'], {'jugador-b': 'nota sala 2'});
    expect(otraPartida['notaLibre'], 'libre 2');
    expect(otroAutor['notas'], isEmpty);
    expect(otroAutor['notaLibre'], isEmpty);
  });
}
