import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:garden_planner/widgets/content_widgets/control_bar.dart';

void main() {
  testWidgets('Control widget checkboxes working', (WidgetTester tester) async {
    bool isShowSpaceChanged = false;
    bool isImagesChanged = false;

    //Arrange
    await tester.pumpWidget(
      MaterialApp(
        home: Scaffold(
          body: Control(
            showSpaceRequirements: false,
            onShowSpaceChanged: (value) => isShowSpaceChanged = true,
            showImages: false,
            onImagesChanged: (value) => isImagesChanged = true,
            actionIsNeeded: false,
          ),
        ),
      ),
    );

    expect(find.byType(Checkbox), findsNWidgets(2));

    // Act
    await tester.tap(find.byType(Checkbox).at(0));
    await tester.pump();

    await tester.tap(find.byType(Checkbox).at(1));
    await tester.pump();

    // Assert
    expect(isShowSpaceChanged, true, reason: 'Space value not changed');
    expect(isImagesChanged, true, reason: 'Space value not changed');
  });

  testWidgets('Control widget Action needed false',
      (WidgetTester tester) async {
    //Arrange
    await tester.pumpWidget(
      MaterialApp(
        home: Scaffold(
          body: Control(
            showSpaceRequirements: false,
            onShowSpaceChanged: (value) => {},
            showImages: false,
            onImagesChanged: (value) => {},
            actionIsNeeded: false,
          ),
        ),
      ),
    );

    // Assert
    expect(find.byIcon(Icons.warning), findsNothing,
        reason: 'sholud not be shown "Icon"');
    expect(find.text("Aktion nötig"), findsNothing,
        reason: 'sholud not be shown "Aktion nötig"');
    expect(find.text("Nichts zu tun"), findsOneWidget,
        reason: '"Nichts zu tun" should be displayed');
  });

  testWidgets('Control widget Action needed true >300',
      (WidgetTester tester) async {
    //Arrange
    await tester.pumpWidget(
      MaterialApp(
        home: Scaffold(
            body: SizedBox(
          width: 800,
          child: Control(
            showSpaceRequirements: false,
            onShowSpaceChanged: (value) => {},
            showImages: false,
            onImagesChanged: (value) => {},
            actionIsNeeded: true,
          ),
        )),
      ),
    );

    // Assert
    expect(find.byIcon(Icons.warning), findsOneWidget,
        reason: '"Icons." should be displayed');
    expect(find.text('Aktion nötig'), findsOneWidget,
        reason: '"Aktion nötig" should be display');
    expect(find.text('Nichts zu tun'), findsNothing,
        reason: 'sholud not be shown "Nichts zu tun"');
  });

  testWidgets('Control widget Action needed true <300',
      (WidgetTester tester) async {
    //Arrange
    await tester.pumpWidget(
      MaterialApp(
        home: Scaffold(
            body: SizedBox(
          width: 290,
          child: Control(
            showSpaceRequirements: false,
            onShowSpaceChanged: (value) => {},
            showImages: false,
            onImagesChanged: (value) => {},
            actionIsNeeded: true,
          ),
        )),
      ),
    );

    // Assert
    expect(find.byIcon(Icons.warning), findsOneWidget,
        reason: 'sholud not be shown because size is under 300');
    expect(find.text('' "Aktion nötig"), findsNothing,
        reason: 'sholud not be shown because size is under 300');
    expect(find.text('Nichts zu tun'), findsNothing,
        reason: 'sholud not be shown "Nichts zu tun"');
  });
}
