import 'package:canteen/bean/bean.dart';
import 'package:flutter/material.dart';

class CanteenDishListView extends StatelessWidget{
  final List<Dish> dishes;
  final void Function(int index)?onLikePressed;
  final void Function(int index)?onStarPressed;
  CanteenDishListView(this.dishes,{this.onLikePressed=null,this.onStarPressed=null});
  
  @override
  Widget build(BuildContext context) {
    return ListView.separated(
      shrinkWrap: true,
      addRepaintBoundaries: true,
      itemCount: dishes.length,
      itemBuilder: (BuildContext context,int index){
        return _DishListViewItem(
          index,
          dishes[index],
          onLikePressed,
          onStarPressed
        );
      },
      separatorBuilder: (context,index){return const Divider(color:Colors.grey);},
    );
  }
}
class _DishListViewItem extends StatelessWidget{
  final int id;
  final Dish dish;
  final void Function(int index)?onLikePressed;
  final void Function(int index)?onStarPressed;

  const _DishListViewItem(this.id,this.dish,this.onLikePressed,this.onStarPressed);

  @override
  //5:3=20:12
  //4:3=12:9
  Widget build(BuildContext context){
    return Row(
      mainAxisAlignment: MainAxisAlignment.end,
      children: [
        Expanded(
          child: Column(
            children: [
              Padding(child:Row(
                children: [
                  Text(dish.name,textScaleFactor: 2,),
                  Expanded(child:Row(
                      mainAxisAlignment: MainAxisAlignment.end,
                      children:[Padding(child:Text(dish.cost,textScaleFactor: 1.2,),
                    padding: EdgeInsets.fromLTRB(0,0,16,0),
                  )]))
                ],
              ),
              padding:EdgeInsets.fromLTRB(6,4,4,4)),
              Padding(child:Row(
                children: [
                  Text(dish.canteen,textScaleFactor: 0.9,),
                  Expanded(child:Row(
                      mainAxisAlignment: MainAxisAlignment.end,
                      children:[Padding(child:Text(dish.time,textScaleFactor: 0.9,),
                        padding: EdgeInsets.fromLTRB(0,0,20,0),
                      )]))
                ],
              ),
                padding: EdgeInsets.fromLTRB(6, 0, 0, 6),
              )
            ],
          ),
        ),
        IconButton(
            onPressed: (){if(onLikePressed!=null)onLikePressed!(this.id);},
            icon: Icon(dish.like?Icons.favorite:Icons.favorite_border,color:dish.like?Colors.red:null)
        ),
        IconButton(
            onPressed: (){if(onStarPressed!=null)onStarPressed!(this.id);},
            icon: Icon(dish.star?Icons.star:Icons.star_border,color:dish.star?Colors.amber:null)
        ),

      ],
    );
  }
}