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

class CustomMonthBuilderScreen extends StatelessWidget {
  const CustomMonthBuilderScreen({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: Column(
          children: [
            Expanded(
              child: CbMonthBuilder(
                cbConfig: CbConfig(
                    startDate: DateTime(2020),
                    endDate: DateTime(2123),
                    selectedDate: DateTime(2022),
                    selectedYear: DateTime(2022),
                    weekStartsFrom: WeekStartsFrom.sunday,
                    eventDates: [
                      DateTime(2022, 1, 2),
                      DateTime(2022, 1, 2),
                      DateTime(2022, 1, 3)
                    ],
                    highlightedDates: [
                      DateTime(2022, 1, 6),
                      DateTime(2022, 1, 3)
                    ]),
                yearDropDownCustomizer: YearDropDownCustomizer(
                  yearHeaderBuilder:
                      (isYearPickerExpanded, selectedDate, selectedYear, year) {
                    return Container(
                      height: 40,
                      color: Colors.yellow,
                      child: Row(
                        mainAxisAlignment: MainAxisAlignment.center,
                        crossAxisAlignment: CrossAxisAlignment.center,
                        children: [
                          Text(
                            year,
                            style: const TextStyle(fontWeight: FontWeight.bold),
                          ),
                          Icon(!isYearPickerExpanded
                              ? Icons.arrow_drop_down_outlined
                              : Icons.arrow_drop_up_outlined)
                        ],
                      ),
                    );
                  },
                ),
                monthCustomizer: MonthCustomizer(
                  montMinhHeight: 200,
                  monthMinWidth: 450,
                  padding: const EdgeInsets.all(20),
                  monthHeaderBuilder:
                      (month, headerHeight, headerWidth, paddingLeft) {
                    return Container(
                      color: Colors.grey[200],
                      height: headerHeight,
                      width: headerWidth,
                      child: Padding(
                        padding: EdgeInsets.only(left: paddingLeft),
                        child: Align(
                          alignment: Alignment.center,
                          child: Text(
                            month,
                            style: const TextStyle(
                              fontSize: 22,
                              fontWeight: FontWeight.w600,
                            ),
                          ),
                        ),
                      ),
                    );
                  },
                  monthWeekBuilder: (index, weeks, weekHeight, weekWidth) {
                    return SizedBox(
                      height: weekHeight,
                      width: weekWidth,
                      child: Padding(
                        padding: const EdgeInsets.all(4.0),
                        child: Container(
                          decoration: BoxDecoration(
                              color: Colors.red.withOpacity(0.1),
                              borderRadius: BorderRadius.circular(10),
                              border: Border.all(color: Colors.red)),
                          child: Align(
                            child: Text(
                              weeks,
                              style: const TextStyle(
                                fontSize: 14,
                                color: Colors.red,
                                fontWeight: FontWeight.w500,
                              ),
                              overflow: TextOverflow.ellipsis,
                              maxLines: 1,
                            ),
                          ),
                        ),
                      ),
                    );
                  },
                  monthButtonBuilder: (dateTime,
                      childHeight,
                      childWidth,
                      isSelected,
                      isDisabled,
                      hasEvent,
                      isHighlighted,
                      isCurrentDay) {
                    //Text Theme
                    final txtTheme = Theme.of(context).textTheme;
                    //color theme
                    final colorTheme = Theme.of(context);

                    var daysText = Align(
                      child: Text(
                        '${dateTime.day}',
                        style: isDisabled
                            ? txtTheme.titleMedium
                            : isSelected
                                ? txtTheme.bodyLarge!.copyWith(
                                    fontWeight: FontWeight.bold,
                                    color:
                                        colorTheme.brightness == Brightness.dark
                                            ? Colors.black
                                            : Colors.white)
                                : isHighlighted
                                    ? txtTheme.bodyLarge //Highlighted TextStyle
                                    : isCurrentDay
                                        ? txtTheme
                                            .bodyLarge //CurrentDay TextStyle
                                        : txtTheme.bodyLarge,
                      ),
                    );
                    if (isSelected) {
                      return Container(
                        decoration: const BoxDecoration(
                          color: Colors.red,
                          shape: BoxShape.rectangle,
                        ),
                        margin: const EdgeInsets.all(2),
                        child: daysText,
                      );
                    }
                    return Container(
                      decoration: BoxDecoration(
                          color: isDisabled ? Colors.grey[200] : Colors.yellow,
                          shape: BoxShape.rectangle,
                          border: hasEvent || isHighlighted
                              ? Border.all(
                                  color:
                                      isHighlighted ? Colors.red : Colors.blue,
                                  width: 2)
                              : null),
                      margin: const EdgeInsets.all(2),
                      child: daysText,
                    );
                  },
                ),
              ),
            )
          ],
        ),
      ),
    );
  }
}
