import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:tane/app.dart';
import 'package:tane/i18n/strings.g.dart';

import '../support/test_support.dart';

void main() {
  Widget app(db) => TranslationProvider(
    child: TaneApp(
      repository: newTestRepository(db),
      species: newTestSpeciesRepository(db),
      onboarding: newTestOnboardingStore(),
    ),
  );

  testWidgets('home shows the menu and navigates to inventory', (tester) async {
    LocaleSettings.setLocaleSync(AppLocale.en);
    final db = newTestDatabase();
    addTearDown(db.close);

    await tester.pumpWidget(app(db));
    await tester.pumpAndSettle();

    expect(find.text('Your inventory'), findsOneWidget);
    expect(find.text('Open market'), findsOneWidget);
    expect(find.text('COMING SOON'), findsOneWidget); // market is Block 2

    // Redesign copy: tagline + the two destination subtitles.
    expect(find.text('Share and grow local seeds'), findsOneWidget);
    expect(find.text('Manage your seeds'), findsOneWidget);
    expect(find.text('Browse and exchange'), findsOneWidget);

    await tester.tap(find.byKey(const Key('home.inventory')));
    await tester.pumpAndSettle();

    expect(find.text('No seeds yet. Tap + to add your first.'), findsOneWidget);
    await disposeTree(tester);
  });

  testWidgets('drawer opens and its Inventory item navigates', (tester) async {
    LocaleSettings.setLocaleSync(AppLocale.en);
    final db = newTestDatabase();
    addTearDown(db.close);

    await tester.pumpWidget(app(db));
    await tester.pumpAndSettle();

    await tester.tap(find.byIcon(Icons.menu)); // hamburger
    await tester.pumpAndSettle();

    // Social destinations are shown but disabled.
    expect(find.text('Your profile'), findsOneWidget);

    await tester.tap(find.text('Inventory')); // active drawer item
    await tester.pumpAndSettle();

    expect(find.text('No seeds yet. Tap + to add your first.'), findsOneWidget);
    await disposeTree(tester);
  });

  testWidgets('drawer header returns to home', (tester) async {
    LocaleSettings.setLocaleSync(AppLocale.en);
    final db = newTestDatabase();
    addTearDown(db.close);

    await tester.pumpWidget(app(db));
    await tester.pumpAndSettle();

    // Navigate away from home first.
    await tester.tap(find.byKey(const Key('home.inventory')));
    await tester.pumpAndSettle();
    expect(find.text('No seeds yet. Tap + to add your first.'), findsOneWidget);

    // Open the drawer and tap the Tanemaki brand header.
    await tester.tap(find.byIcon(Icons.menu));
    await tester.pumpAndSettle();
    await tester.tap(find.text('Tanemaki'));
    await tester.pumpAndSettle();

    // Back on the home menu.
    expect(find.text('Your inventory'), findsOneWidget);
    expect(find.text('Open market'), findsOneWidget);
    await disposeTree(tester);
  });

  testWidgets('drawer Settings opens the settings screen', (tester) async {
    LocaleSettings.setLocaleSync(AppLocale.en);
    final db = newTestDatabase();
    addTearDown(db.close);

    await tester.pumpWidget(app(db));
    await tester.pumpAndSettle();

    await tester.tap(find.byIcon(Icons.menu));
    await tester.pumpAndSettle();
    await tester.tap(find.text('Settings'));
    await tester.pumpAndSettle();

    expect(find.text('Language'), findsOneWidget);
    expect(find.text('Español'), findsOneWidget);
    await disposeTree(tester);
  });
}
