import 'package:basic_utils/basic_utils.dart';
import 'package:ernaehrung/android/components/card/card_data_food_component.dart';
import 'package:ernaehrung/android/components/card/card_title_component.dart';
import 'package:ernaehrung/android/config/cast_helper.dart';
import 'package:flutter/material.dart';
import '../../models/food.dart';
import '../../pages/nav_pages/search_food.dart';

class CardComponent extends StatelessWidget {
  final String title;
  final List<dynamic> foods;

  const CardComponent(this.title, this.foods, {super.key});

  Route createRoute(String cardName) {
    return PageRouteBuilder(
      pageBuilder: (context, animation, secondaryAnimation) =>
          SearchFoodPage(cardName),
      transitionsBuilder: (context, animation, secondaryAnimation, child) {
        const begin = Offset(0.0, 1.0);
        const end = Offset.zero;
        const curve = Curves.ease;

        var tween =
        Tween(begin: begin, end: end).chain(CurveTween(curve: curve));

        return SlideTransition(
          position: animation.drive(tween),
          child: child,
        );
      },
    );
  }

  int countCalories(List<Food> foods){
    int summary = 0;
    for(int i=0; i<foods.length;i++){
      summary += foods[i].calories is int ?  foods[i].calories as int : (foods[i].calories as double).round();
    }

    return summary;
  }

  @override
  Widget build(BuildContext context) {
    return Container(
        height: 300,
        decoration: const BoxDecoration(
          color: Color(0xFF6E7BFB),
          borderRadius: BorderRadius.all(Radius.circular(16)),
        ),
        margin: const EdgeInsets.fromLTRB(0, 16, 0, 16),
        child: Column(
          children: [
            CardTitleComponent(
                StringUtils.capitalize(title), "${countCalories(castDynamicToListFood(foods))} Kalorien"),
            CardDataFoodComponent(
              castDynamicToListFood(foods)
            ),
            Padding(
              padding: const EdgeInsets.symmetric(vertical: 0, horizontal: 8),
              child: Container(
                margin: const EdgeInsets.fromLTRB(0, 8, 0, 0),
                child: ElevatedButton(
                  style: ElevatedButton.styleFrom(
                    minimumSize: const Size.fromHeight(40), //
                    backgroundColor: const Color(0xFFffffff),
                    foregroundColor: const Color(0xFF6E7BFB),
                    shape: const StadiumBorder(),
                  ),
                  onPressed: () async {
                    Navigator.of(context).push(createRoute(title));
                  },
                  child: Text('Gericht zum ${StringUtils.capitalize(title)} hinzufügen'),
                ),
              ),
            )
          ],
        ));
  }
}
