import 'package:flutter/material.dart';
import 'package:flutter_expandable_fab/flutter_expandable_fab.dart';
import 'package:intl/intl.dart';
import 'package:intl/date_symbol_data_local.dart';

import 'package:sendtrain/classes/media.dart';
import 'package:sendtrain/database.dart';
import 'package:sendtrain/models/activity_model.dart';
import 'package:sendtrain/models/session_model.dart';
import 'package:sendtrain/widgets/activity_card.dart';
import 'package:sendtrain/widgets/media_card.dart';

class SessionView extends StatelessWidget {
  const SessionView({super.key, required this.data, required this.session});

  final SessionModel data;
  final Session session;

  @override
  Widget build(BuildContext context) {
    initializeDateFormatting('en');
    final DateFormat dateFormat = DateFormat('yyyy-MM-dd');

    return Scaffold(
        floatingActionButtonLocation: ExpandableFab.location,
        floatingActionButton: ExpandableFab(
            distance: 70,
            type: ExpandableFabType.up,
            overlayStyle: ExpandableFabOverlayStyle(
              color: Colors.black.withOpacity(0.5),
              blur: 10,
            ),
            children: [
              FloatingActionButton.extended(
                icon: const Icon(Icons.history_outlined),
                label: Text('Restart'),
                onPressed: () {},
              ),
              FloatingActionButton.extended(
                icon: const Icon(Icons.done_all_outlined),
                label: Text('Done'),
                onPressed: () {},
              ),
              FloatingActionButton.extended(
                icon: const Icon(Icons.edit_outlined),
                label: Text('Edit'),
                onPressed: () {},
              ),
            ]),
        body: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            AppBar(
              centerTitle: true,
              title: Text('Session @ ${dateFormat.format(session.date as DateTime)}',
                  style: const TextStyle(fontSize: 15)),
            ),
            Padding(
                padding: const EdgeInsets.only(
                    left: 15, right: 20, top: 15, bottom: 10),
                child: Text(
                    maxLines: 1,
                    style: const TextStyle(
                        fontSize: 25, fontWeight: FontWeight.bold),
                    session.title)),
            SessionViewAchievements(achievements: data.achievements),
            Padding(
                padding: const EdgeInsets.only(left: 15, right: 15),
                child:
                    Text(style: const TextStyle(fontSize: 15), session.content)),
            const Padding(
                padding: EdgeInsets.fromLTRB(15, 30, 0, 10),
                child: Text(
                    style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
                    'Media:')),
            SessionViewMedia(media: data.media),
            const Padding(
                padding: EdgeInsets.fromLTRB(15, 30, 0, 10),
                child: Text(
                    style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
                    'Activites:')),
            SessionViewActivities(activities: data.activities),
          ],
        ));
  }
}

class SessionViewActivities extends StatelessWidget {
  const SessionViewActivities({super.key, this.activities});

  final List<ActivityModel>? activities;

  @override
  Widget build(BuildContext context) {
    return Expanded(
        child: ListView.builder(
      // shrinkWrap: true,
      padding: const EdgeInsets.fromLTRB(10, 0, 10, 0),
      itemCount: activities?.length,
      itemBuilder: (BuildContext context, int index) {
        return ActivityCard(activity: activities![index]);
      },
    ));
  }
}

class SessionViewAchievements extends StatelessWidget {
  const SessionViewAchievements({super.key, this.achievements});

  final List<String>? achievements;

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        Padding(
            padding: const EdgeInsets.only(bottom: 10),
            child: SizedBox(
                height: 40,
                child: ListView.builder(
                  scrollDirection: Axis.horizontal,
                  padding: const EdgeInsets.fromLTRB(10, 0, 10, 0),
                  itemCount: achievements?.length,
                  itemBuilder: (BuildContext context, int index) {
                    return Padding(
                        padding: const EdgeInsets.only(right: 5),
                        child: ActionChip(
                          visualDensity: VisualDensity.compact,
                          avatar: const Icon(Icons.check_circle_outline),
                          label: Text(maxLines: 1, '${achievements?[index]}'),
                          onPressed: () {},
                        ));
                  },
                ))),
      ],
    );
  }
}

class SessionViewMedia extends StatelessWidget {
  const SessionViewMedia({super.key, this.media});

  final List<Media>? media;

  @override
  Widget build(BuildContext context) {
    List<Widget> mediaCards = List.generate((media != null) ? media!.length : 0,
        (i) => MediaCard(media: media![i]));

    return Column(
      children: [
        SizedBox(
            width: double.infinity,
            height: 100,
            child: GridView.count(
                padding: const EdgeInsets.fromLTRB(15, 0, 0, 0),
                scrollDirection: Axis.horizontal,
                crossAxisSpacing: 5,
                mainAxisSpacing: 5,
                crossAxisCount: 1,
                children: mediaCards))
      ],
    );
  }
}