import 'package:comwell_key_app/overview/components/current_booking_list_item_view.dart';
import 'package:comwell_key_app/overview/components/find_booking_button.dart';
import 'package:comwell_key_app/overview/components/room_selection_widget.dart';
import 'package:comwell_key_app/overview/cubit/overview_cubit.dart';
import 'package:comwell_key_app/overview/cubit/overview_state.dart';
import 'package:comwell_key_app/overview/models/booking.dart';
import 'package:comwell_key_app/themes/light_theme.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:comwell_key_app/common/components/shimmer_loader/overview_shimmer_loader.dart';

class CurrentBookingsTabView extends StatelessWidget {
  final Iterable<Booking> bookings;
  final String bookingsTitle;
  final String bookingsSubtitle;
  final String bookingsImage;

  const CurrentBookingsTabView({
    required this.bookings,
    required this.bookingsTitle,
    required this.bookingsSubtitle,
    required this.bookingsImage,
    super.key,
  });

  @override
  Widget build(BuildContext context) {
    final theme = Theme.of(context);
    final cubit = context.read<OverviewCubit>();
    
    return BlocBuilder<OverviewCubit, OverviewState>(
      builder: (context, state) {
        if (state.isLoading) {
          return ListView(
            children: const [
              SizedBox(height: 20),
              OverviewShimmerLoader(),
              SizedBox(height: 20),
              OverviewShimmerLoader(),
              SizedBox(height: 20),
              OverviewShimmerLoader(),
            ],
          );
        }
        return RefreshIndicator(
          backgroundColor: sandColor[80],
          color: sandColor[10],
          onRefresh: () async {
            await cubit.fetchBookings();
          },
          child: Builder(
            builder: (context) {
              if (bookings.isEmpty) {

                return ListView(
                  children: [
                    const SizedBox(
                      height: 20,
                    ),
                    Container(
                      height: 276,
                      decoration: BoxDecoration(
                          image: const DecorationImage(
                            image: AssetImage(
                                "assets/images/no_current_bookings_background.jpeg"),
                            fit: BoxFit.cover,
                          ),
                          borderRadius: BorderRadius.circular(10),
                          border: Border.all(color: Colors.transparent)),
                      margin: const EdgeInsets.symmetric(horizontal: 8),
                      child: Padding(
                        padding: const EdgeInsets.all(16),
                        child: Column(
                          mainAxisAlignment: MainAxisAlignment.end,
                          crossAxisAlignment: CrossAxisAlignment.start,
                          children: [
                            Text(
                              bookingsTitle,
                              textAlign: TextAlign.start,
                              style: theme.textTheme.headlineMedium?.copyWith(
                                color: Colors.white,
                              ),
                            ),
                            const SizedBox(height: 6),
                            Text(
                              textAlign: TextAlign.start,
                              bookingsSubtitle,
                              style: theme.textTheme.bodySmall?.copyWith(
                                color: Colors.grey.shade500,
                              ),
                            ),
                          ],
                        ),
                      ),
                    ),
                  ],
                );
              } else {
                return ListView.builder(
                  shrinkWrap: true,
                  itemCount: bookings.length,
                  itemBuilder: (context, index) {
                    final booking = bookings.elementAt(index);
                    final isLastItem = index == bookings.length - 1;
                    return Column(
                      children: [
                        CurrentBookingListItem(booking: booking),
                        RoomSelectionWidget(booking: booking),
                        ...(isLastItem ? [
                          const FindBookingButton(),
                        ] : []),
                      ],
                    );
                  },
                );
              } 
            },
          ),
        );
      },
    );
  }
}