import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';

import '../../cubit/bottom_nav_cubit.dart';
import '../widgets/app_bar.dart';
import '../widgets/bottom_nav_bar.dart';

import 'discoveries_screen.dart';
import 'home_screen.dart';
import 'statistics_screen.dart';

class SkeletonScreen extends StatefulWidget {
  const SkeletonScreen({super.key});

  @override
  State<SkeletonScreen> createState() => _SkeletonScreenState();
}

class _SkeletonScreenState extends State<SkeletonScreen> {
  @override
  Widget build(BuildContext context) {
    const List<Widget> pageNavigation = <Widget>[
      const HomeScreen(),
      const DiscoveriesScreen(),
      const StatisticsScreen(),
    ];

    return BlocProvider<BottomNavCubit>(
      create: (BuildContext context) => BottomNavCubit(),
      child: BlocBuilder<BottomNavCubit, int>(
        builder: (BuildContext context, int state) {
          return GestureDetector(
            onHorizontalDragEnd: (dragDetail) {
              if (dragDetail.velocity.pixelsPerSecond.dx < 1) {
                context.read<BottomNavCubit>().moveNext();
              } else {
                context.read<BottomNavCubit>().movePrevious();
              }
            },
            child: Scaffold(
              appBar: StandardAppBar(notifyParent: refresh),
              extendBodyBehindAppBar: false,
              body: BlocBuilder<BottomNavCubit, int>(
                builder: (BuildContext context, int state) {
                  return AnimatedSwitcher(
                    duration: const Duration(milliseconds: 300),
                    child: pageNavigation.elementAt(state),
                  );
                },
              ),
              bottomNavigationBar: const BottomNavBar(),
              backgroundColor: Theme.of(context).colorScheme.background,
            ),
          );
        },
      ),
    );
  }

  refresh() {
    void rebuild(Element el) {
      el.markNeedsBuild();
      el.visitChildren(rebuild);
    }

    (context as Element).visitChildren(rebuild);
  }
}