import 'package:flutter/material.dart';
import 'package:sendtrain/classes/media.dart';
import 'package:sendtrain/models/activity_model.dart';
import 'package:sendtrain/widgets/activity_view.dart';
import 'package:sendtrain/widgets/media_card.dart';

class ActivityCard extends StatelessWidget {
  const ActivityCard({super.key, required this.activity});

  final ActivityModel activity;

  @override
  Widget build(BuildContext context) {
    return Card(
      color: const Color(0xff3A5FB6),
      clipBehavior: Clip.hardEdge,
      child: InkWell(
          splashColor: Colors.deepPurple,
          onTap: () => showGeneralDialog(
              barrierColor: Colors.black.withOpacity(0.5),
              transitionDuration: const Duration(milliseconds: 220),
              transitionBuilder: (BuildContext context,
                  Animation<double> animation,
                  Animation<double> secondaryAnimation,
                  Widget child) {
                Animation<Offset> custom = Tween<Offset>(
                        begin: const Offset(0.0, 1.0),
                        end: const Offset(0.0, 0.0))
                    .animate(animation);
                return SlideTransition(
                    position: custom,
                    child: Dialog.fullscreen(
                        child: ActivityView(activity: activity)));
              },
              barrierDismissible: true,
              barrierLabel: '',
              context: context,
              pageBuilder: (context, animation1, animation2) {
                return Container();
              }),
          child: Column(
            mainAxisSize: MainAxisSize.min,
            children: <Widget>[
              ListTile(
                leading: Padding(
                    padding: const EdgeInsets.fromLTRB(0, 0, 0, 0),
                    child: Container(
                      width: 60,
                      decoration: BoxDecoration(
                        image: DecorationImage(
                            fit: BoxFit.cover,
                            image: findMediaByType(
                                activity.actions[0].media, 'image')),
                        // color: Colors.blue,
                        borderRadius:
                            const BorderRadius.all(Radius.elliptical(10, 10)),
                      ),
                    )),
                title: Text(maxLines: 1, activity.title),
                subtitle: Text(maxLines: 2, activity.description),
              ),
            ],
          )),
    );
  }

  ImageProvider findMediaByType(List<Media>? media, String type) {
    var found = media!.where((m) => m.type == 'image');

    if (found.isNotEmpty) {
      return NetworkImage(found.first.reference);
    } else {
      // Element is not found
      return const AssetImage('assets/images/placeholder.jpg');
    }
  }
}