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

import 'package:sendtrain/classes/media.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});

  final SessionModel data;

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

    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: <Widget>[
        AppBar(
          centerTitle: true,
          title: Text('Session @ ${dateFormat.format(data.date)}',
              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),
                data.title)),
        SessionViewAchievements(achievements: data.achievements),
        Padding(
            padding: const EdgeInsets.only(left: 15, right: 15),
            child: Text(
              style: const TextStyle(fontSize: 15),
              data.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),
        // TextButton(
        //   onPressed: () {
        //     Navigator.pop(context);
        //   },
        //   child: const Text('Close'),
        // ),
      ],
    );
  }
}

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))
      ],
    );
  }
}