import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:garden_planner/repositories/beet.repositories.dart';
import 'package:garden_planner/widgets/content_widgets/dashboard.dart';
import 'package:garden_planner/widgets/content_widgets/dashboard_widgets/plant_row.dart';
import 'package:garden_planner/widgets/content_widgets/dashboard_widgets/space/plant_row_horizontal_space.dart';
import 'package:garden_planner/widgets/content_widgets/dashboard_widgets/space/plant_row_space.dart';

import '../../helpers/beet_repository_generator.dart';
import '../../helpers/plant_generator.dart';

void main() {
  late BeetRepository beetRepository;

  setUp(() {
    beetRepository = BeetRepositoryGenerator.getBeetRepository();

    beetRepository.addNewRowToBeet();
    beetRepository.addNewRowToBeet();

    beetRepository.addPlantToRowById(0, PlantGenerator.getPlant());

    beetRepository.addPlantToRowById(2, PlantGenerator.getPlant());
    beetRepository.addPlantToRowById(2, PlantGenerator.getPlant2());
  });

  testWidgets('Displays all rows', (WidgetTester tester) async {
    final currentDate = DateTime.now();

    //Arrange
    await tester.pumpWidget(
      MaterialApp(
        home: Scaffold(
          body: Dashboard(
            onPlantDroppedToRow: (rowIndex, plant) {},
            onPlantRemoveFromRow: (rowIndex, plantInRow) {},
            beetRepository: beetRepository,
            showSpaceRequirement: false,
            showImages: true,
            currentDate: currentDate,
          ),
        ),
      ),
    );

    //Assert
    expect(find.byType(SingleChildScrollView), findsOneWidget);
    expect(find.byType(PlantRow), findsNWidgets(3), reason: '3 Rows are setup');

    expect(find.byType(PlantRowHorizontalSpace), findsNothing,
        reason: 'Vertical Space should be displayed');
    expect(find.byType(PlantRowSpace), findsNothing,
        reason: 'Vertical Space should be displayed');
  });

  testWidgets('Displays all rows show space', (WidgetTester tester) async {
    final currentDate = DateTime.now();

    //Arrange
    await tester.pumpWidget(
      MaterialApp(
        home: Scaffold(
          body: Dashboard(
            onPlantDroppedToRow: (rowIndex, plant) {},
            onPlantRemoveFromRow: (rowIndex, plantInRow) {},
            beetRepository: beetRepository,
            showSpaceRequirement: true,
            showImages: true,
            currentDate: currentDate,
          ),
        ),
      ),
    );

    //Assert
    expect(find.byType(SingleChildScrollView), findsOneWidget);
    expect(find.byType(PlantRow), findsNWidgets(3), reason: '3 Rows are setup');

    expect(find.byType(PlantRowHorizontalSpace), findsNWidgets(2),
        reason: 'Vertical Space should be displayed');
    expect(find.byType(PlantRowSpace), findsNWidgets(2),
        reason: 'Vertical Space should be displayed');
  });
}
