import 'package:equatable/equatable.dart';

class CartsModel extends Equatable {
  CartsModel({
    this.status,
    this.error,
    required this.data,
    this.totalPayment,
    this.potonganKupon,
  });

  final int? status;
  final bool? error;
  final List<DataCartsModel> data;
  final int? potonganKupon;
  final String? totalPayment;

  factory CartsModel.fromJson(Map<String, dynamic> json) => CartsModel(
        status: json["status"],
        error: json["error"],
        data: List<DataCartsModel>.from(
            json["data"].map((x) => DataCartsModel.fromJson(x))),
        potonganKupon: json["potongan_kupon"],
        totalPayment: json["total_payment"],
      );

  Map<String, dynamic> toJson() => {
        "status": status,
        "error": error,
        "data": List<dynamic>.from(data.map((x) => x.toJson())),
        "total_payment": totalPayment,
      };

  @override
  // TODO: implement props
  List<Object?> get props => [];
}

class DataCartsModel extends Equatable {
  DataCartsModel({
    this.cartId,
    this.courseId,
    this.title,
    this.price,
    this.instructor,
    this.thumbnail,
    this.discountPrice,
    this.discountFlag,
    this.totalDiscount,
    this.student,
    required this.review,
    this.fotoProfile,
    this.coupon,
    this.finalPrice,
    this.potonganKupon,
  });

  final String? cartId;
  final String? courseId;
  final String? title;
  final String? price;
  final String? instructor;
  final String? thumbnail;
  final String? discountPrice;
  final String? discountFlag;
  final int? totalDiscount;
  final String? student;
  final List<Review> review;
  final dynamic fotoProfile;
  final Coupon? coupon;
  final String? finalPrice;
  final String? potonganKupon;

  factory DataCartsModel.fromJson(Map<String, dynamic> json) => DataCartsModel(
        cartId: json["cart_id"],
        courseId: json["course_id"],
        title: json["title"],
        price: json["price"],
        instructor: json["instructor"],
        thumbnail: json["thumbnail"],
        discountPrice: json["discount_price"],
        discountFlag: json["discount_flag"],
        totalDiscount: json["total_discount"],
        student: json["student"],
        review:
            List<Review>.from(json["review"].map((x) => Review.fromJson(x))),
        fotoProfile: json["foto_profile"],
        coupon: json["coupon"] == null ? null : Coupon.fromJson(json["coupon"]),
        potonganKupon: json["potongan_kupon"],
        finalPrice: json["final_price"],
      );

  Map<String, dynamic> toJson() => {
        "cart_id": cartId,
        "course_id": courseId,
        "title": title,
        "price": price,
        "instructor": instructor,
        "thumbnail": thumbnail,
        "discount_price": discountPrice,
        "discount_flag": discountFlag,
        "total_discount": totalDiscount,
        "student": student,
        "review": List<dynamic>.from(review.map((x) => x.toJson())),
        "foto_profile": fotoProfile,
        "coupon": coupon,
        "final_price": finalPrice
      };

  @override
  // TODO: implement props
  List<Object?> get props => [finalPrice];
}

class Coupon {
  Coupon({
    this.id,
    this.typeCoupon,
    this.codeCoupon,
    this.value,
    this.finalPrice,
  });

  final String? id;
  final String? typeCoupon;
  final String? codeCoupon;
  final String? value;
  final int? finalPrice;

  factory Coupon.fromJson(Map<String, dynamic> json) => Coupon(
        id: json["id"],
        typeCoupon: json["type_coupon"],
        codeCoupon: json["code_coupon"],
        value: json["value"],
        finalPrice: json["final_price"],
      );

  Map<String, dynamic> toJson() => {
        "id": id,
        "type_coupon": typeCoupon,
        "code_coupon": codeCoupon,
        "value": value,
        "final_price": finalPrice,
      };
}

class Review {
  Review({
    this.totalReview,
    this.avgRating,
  });

  final String? totalReview;
  final int? avgRating;

  factory Review.fromJson(Map<String, dynamic> json) => Review(
        totalReview: json["total_review"],
        avgRating: json["avg_rating"] == null ? null : json["avg_rating"],
      );

  Map<String, dynamic> toJson() => {
        "total_review": totalReview,
        "avg_rating": avgRating == null ? null : avgRating,
      };
}
