// // To parse this JSON data, do
// //
// //     final wishListModel = wishListModelFromJson(jsondynamic);

// import 'dart:convert';

// WishListModel wishListModelFromJson(dynamic str) => WishListModel.fromJson(json.decode(str));

// dynamic wishListModelToJson(WishListModel data) => json.encode(data.toJson());

// class WishListModel {
//     dynamic id;
//     dynamic userId;
//     DateTime?? createdAt;
//     DateTime?? updatedAt;
//     List<WishListItem>? items;
//     dynamic? totalItems;

//     WishListModel({
//         this.id,
//         this.userId,
//         this.createdAt,
//         this.updatedAt,
//         this.items,
//         this.totalItems,
//     });

//     factory WishListModel.fromJson(Map<dynamic, dynamic> json) => WishListModel(
//         id: json["id"],
//         userId: json["userId"],
//         createdAt: DateTime?.parse(json["createdAt"]),
//         updatedAt: DateTime?.parse(json["updatedAt"]),
//         items: List<WishListItem>.from(json["items"].map((x) => WishListItem.fromJson(x))),
//         totalItems: json["totalItems"],
//     );

//     Map<dynamic, dynamic> toJson() => {
//         "id": id,
//         "userId": userId,
//         "createdAt": createdAt,
//         "updatedAt": updatedAt,
//         "items": List<dynamic>.from(items!.map((x) => x.toJson())),
//         "totalItems": totalItems,
//     };
// }

// class WishListItem {
//     dynamic id;
//     dynamic wishlistId;
//     dynamic productId;
//     dynamic storeId;
//     DateTime?? createdAt;
//     DateTime?? updatedAt;
//     ProductDatum? product;
//     Store? store;

//     WishListItem({
//         this.id,
//         this.wishlistId,
//         this.productId,
//         this.storeId,
//         this.createdAt,
//         this.updatedAt,
//         this.product,
//         this.store,
//     });

//     factory WishListItem.fromJson(Map<dynamic, dynamic> json) => WishListItem(
//         id: json["id"],
//         wishlistId: json["wishlistId"],
//         productId: json["productId"],
//         storeId: json["storeId"],
//         createdAt: DateTime?.parse(json["createdAt"]),
//         updatedAt: DateTime?.parse(json["updatedAt"]),
//         product: ProductDatum.fromJson(json["product"]),
//         store: Store.fromJson(json["store"]),
//     );

//     Map<dynamic, dynamic> toJson() => {
//         "id": id,
//         "wishlistId": wishlistId,
//         "productId": productId,
//         "storeId": storeId,
//         "createdAt": createdAt,
//         "updatedAt": updatedAt,
//         "product": product!.toJson(),
//         "store": store!.toJson(),
//     };
// }

// class ProductDatum {
//     dynamic id;
//     dynamic name;
//     dynamic description;
//     dynamic additionalInfo;
//     dynamic brand;
//     dynamic basePrice;
//     dynamic discountPrice;
//     dynamic stock;
//     dynamic quantity;
//     dynamic unit;
//     dynamic slug;
//     dynamic rating;
//     bool? isInStock;
//     bool? isActive;
//     bool? isInWishlist;
//     DateTime?? createdAt;
//     DateTime?? updatedAt;
//     dynamic storeId;
//     dynamic categoryId;
//     dynamic productTypeId;
//     dynamic timeSlotId;

//     ProductDatum({
//         this.id,
//         this.name,
//         this.description,
//         this.additionalInfo,
//         this.brand,
//         this.basePrice,
//         this.discountPrice,
//         this.stock,
//         this.quantity,
//         this.unit,
//         this.slug,
//         this.rating,
//         this.isInStock,
//         this.isActive,
//         this.isInWishlist,
//         this.createdAt,
//         this.updatedAt,
//         this.storeId,
//         this.categoryId,
//         this.productTypeId,
//         this.timeSlotId,
//     });

//     factory ProductDatum.fromJson(Map<dynamic, dynamic> json) => ProductDatum(
//         id: json["id"],
//         name: json["name"],
//         description: json["description"],
//         additionalInfo: json["additionalInfo"],
//         brand: json["brand"],
//         basePrice: json["basePrice"],
//         discountPrice: json["discountPrice"],
//         stock: json["stock"],
//         quantity: json["quantity"],
//         unit: json["unit"],
//         slug: json["slug"],
//         rating: json["rating"],
//         isInStock: json["isInStock"],
//         isActive: json["isActive"],
//         isInWishlist: json["isInWishlist"],
//         createdAt: DateTime?.parse(json["createdAt"]),
//         updatedAt: DateTime?.parse(json["updatedAt"]),
//         storeId: json["storeId"],
//         categoryId: json["categoryId"],
//         productTypeId: json["productTypeId"],
//         timeSlotId: json["timeSlotId"],
//     );

//     Map<dynamic, dynamic> toJson() => {
//         "id": id,
//         "name": name,
//         "description": description,
//         "additionalInfo": additionalInfo,
//         "brand": brand,
//         "basePrice": basePrice,
//         "discountPrice": discountPrice,
//         "stock": stock,
//         "quantity": quantity,
//         "unit": unit,
//         "slug": slug,
//         "rating": rating,
//         "isInStock": isInStock,
//         "isActive": isActive,
//         "isInWishlist": isInWishlist,
//         "createdAt": createdAt,
//         "updatedAt": updatedAt,
//         "storeId": storeId,
//         "categoryId": categoryId,
//         "productTypeId": productTypeId,
//         "timeSlotId": timeSlotId,
//     };

//   void add(ProductDatum productDatum) {}
// }

// class Store {
//     dynamic id;
//     dynamic storeName;
//     dynamic storeDescription;
//     dynamic officialPhoneNumber;
//     dynamic storeAddress;
//     dynamic gstNumber;
//     dynamic gumastaNumber;
//     dynamic storePicture;
//     DateTime?? createdAt;
//     DateTime?? updatedAt;
//     dynamic vendorId;
//     bool? isActive;
//     dynamic couponId;

//     Store({
//         this.id,
//         this.storeName,
//         this.storeDescription,
//         this.officialPhoneNumber,
//         this.storeAddress,
//         this.gstNumber,
//         this.gumastaNumber,
//         this.storePicture,
//         this.createdAt,
//         this.updatedAt,
//         this.vendorId,
//         this.isActive,
//         this.couponId,
//     });

//     factory Store.fromJson(Map<dynamic, dynamic> json) => Store(
//         id: json["id"],
//         storeName: json["storeName"],
//         storeDescription: json["storeDescription"],
//         officialPhoneNumber: json["officialPhoneNumber"],
//         storeAddress: json["storeAddress"],
//         gstNumber: json["gstNumber"],
//         gumastaNumber: json["gumastaNumber"],
//         storePicture: json["storePicture"],
//         createdAt: DateTime?.parse(json["createdAt"]),
//         updatedAt: DateTime?.parse(json["updatedAt"]),
//         vendorId: json["vendorId"],
//         isActive: json["isActive"],
//         couponId: json["couponId"],
//     );

//     Map<dynamic, dynamic> toJson() => {
//         "id": id,
//         "storeName": storeName,
//         "storeDescription": storeDescription,
//         "officialPhoneNumber": officialPhoneNumber,
//         "storeAddress": storeAddress,
//         "gstNumber": gstNumber,
//         "gumastaNumber": gumastaNumber,
//         "storePicture": storePicture,
//         "createdAt": createdAt,
//         "updatedAt": updatedAt,
//         "vendorId": vendorId,
//         "isActive": isActive,
//         "couponId": couponId,
//     };
// }


// To parse this JSON data, do
//
//     final wishListModel = wishListModelFromJson(jsondynamic);

import 'dart:convert';

WishListModel wishListModelFromJson(dynamic str) => WishListModel.fromJson(json.decode(str));

dynamic wishListModelToJson(WishListModel data) => json.encode(data.toJson());

class WishListModel {
    dynamic id;
    dynamic userId;
    DateTime? createdAt;
    DateTime? updatedAt;
    List<WishListItem>? items;
    dynamic totalItems;

    WishListModel({
        this.id,
        this.userId,
        this.createdAt,
        this.updatedAt,
        this.items,
        this.totalItems,
    });

    factory WishListModel.fromJson(Map<dynamic, dynamic> json) => WishListModel(
        id: json["id"],
        userId: json["userId"],
        createdAt: DateTime?.parse(json["createdAt"]),
        updatedAt: DateTime?.parse(json["updatedAt"]),
        items: List<WishListItem>.from(json["items"].map((x) => WishListItem.fromJson(x))),
        totalItems: json["totalItems"],
    );

    Map<dynamic, dynamic> toJson() => {
        "id": id,
        "userId": userId,
        "createdAt": createdAt,
        "updatedAt": updatedAt,
        "items": List<dynamic>.from(items!.map((x) => x.toJson())),
        "totalItems": totalItems,
    };
}

class WishListItem {
    dynamic id;
    dynamic wishlistId;
    dynamic productId;
    dynamic storeId;
    DateTime? createdAt;
    DateTime? updatedAt;
    ProductDatum? product;
    Store? store;

    WishListItem({
        this.id,
        this.wishlistId,
        this.productId,
        this.storeId,
        this.createdAt,
        this.updatedAt,
        this.product,
        this.store,
    });

    factory WishListItem.fromJson(Map<dynamic, dynamic> json) => WishListItem(
        id: json["id"],
        wishlistId: json["wishlistId"],
        productId: json["productId"],
        storeId: json["storeId"],
        createdAt: DateTime?.parse(json["createdAt"]),
        updatedAt: DateTime?.parse(json["updatedAt"]),
        product: ProductDatum.fromJson(json["product"]),
        store: Store.fromJson(json["store"]),
    );

    Map<dynamic, dynamic> toJson() => {
        "id": id,
        "wishlistId": wishlistId,
        "productId": productId,
        "storeId": storeId,
        "createdAt": createdAt,
        "updatedAt": updatedAt,
        "product": product!.toJson(),
        "store": store!.toJson(),
    };
}

class ProductDatum {
    dynamic id;
    dynamic name;
    dynamic description;
    dynamic additionalInfo;
    dynamic brand;
    dynamic basePrice;
    dynamic discountPrice;
    dynamic? stock;
    dynamic? quantity;
    dynamic unit;
    dynamic slug;
    dynamic averageRating;
    bool? isInStock;
    bool? isActive;
    DateTime? createdAt;
    DateTime? updatedAt;
    dynamic storeId;
    dynamic categoryId;
    dynamic productTypeId;
    dynamic timeSlotId;
    List<ProductImage>? productImages;
    Category? category;
    List<ProductTag>? productTags;
    List<dynamic>? zones;
    List<ProductReview>? productReview;

    ProductDatum({
        this.id,
        this.name,
        this.description,
        this.additionalInfo,
        this.brand,
        this.basePrice,
        this.discountPrice,
        this.stock,
        this.quantity,
        this.unit,
        this.slug,
        this.averageRating,
        this.isInStock,
        this.isActive,
        this.createdAt,
        this.updatedAt,
        this.storeId,
        this.categoryId,
        this.productTypeId,
        this.timeSlotId,
        this.productImages,
        this.category,
        this.productTags,
        this.zones,
        this.productReview,
    });

    factory ProductDatum.fromJson(Map<dynamic, dynamic> json) => ProductDatum(
        id: json["id"],
        name: json["name"],
        description: json["description"],
        additionalInfo: json["additionalInfo"],
        brand: json["brand"],
        basePrice: json["basePrice"],
        discountPrice: json["discountPrice"],
        stock: json["stock"],
        quantity: json["quantity"],
        unit: json["unit"],
        slug: json["slug"],
        averageRating: json["averageRating"],
        isInStock: json["isInStock"],
        isActive: json["isActive"],
        createdAt: DateTime?.parse(json["createdAt"]),
        updatedAt: DateTime?.parse(json["updatedAt"]),
        storeId: json["storeId"],
        categoryId: json["categoryId"],
        productTypeId: json["productTypeId"],
        timeSlotId: json["timeSlotId"],
        productImages: List<ProductImage>.from(json["productImages"].map((x) => ProductImage.fromJson(x))),
        category: Category.fromJson(json["category"]),
        productTags: List<ProductTag>.from(json["productTags"].map((x) => ProductTag.fromJson(x))),
        zones: List<dynamic>.from(json["zones"].map((x) => x)),
        productReview: List<ProductReview>.from(json["ProductReview"].map((x) => ProductReview.fromJson(x))),
    );

    Map<dynamic, dynamic> toJson() => {
        "id": id,
        "name": name,
        "description": description,
        "additionalInfo": additionalInfo,
        "brand": brand,
        "basePrice": basePrice,
        "discountPrice": discountPrice,
        "stock": stock,
        "quantity": quantity,
        "unit": unit,
        "slug": slug,
        "averageRating": averageRating,
        "isInStock": isInStock,
        "isActive": isActive,
        "createdAt": createdAt,
        "updatedAt": updatedAt,
        "storeId": storeId,
        "categoryId": categoryId,
        "productTypeId": productTypeId,
        "timeSlotId": timeSlotId,
        "productImages": List<dynamic>.from(productImages!.map((x) => x.toJson())),
        "category": category!.toJson(),
        "productTags": List<dynamic>.from(productTags!.map((x) => x.toJson())),
        "zones": List<dynamic>.from(zones!.map((x) => x)),
        "ProductReview": List<dynamic>.from(productReview!.map((x) => x.toJson())),
    };
}

class Category {
    dynamic id;
    dynamic name;
    dynamic description;
    dynamic image;
    dynamic slug;
    dynamic? level;
    bool? isActive;
    DateTime? createdAt;
    DateTime? updatedAt;
    dynamic parentCategoryId;
    dynamic path;

    Category({
        this.id,
        this.name,
        this.description,
        this.image,
        this.slug,
        this.level,
        this.isActive,
        this.createdAt,
        this.updatedAt,
        this.parentCategoryId,
        this.path,
    });

    factory Category.fromJson(Map<dynamic, dynamic> json) => Category(
        id: json["id"],
        name: json["name"],
        description: json["description"],
        image: json["image"],
        slug: json["slug"],
        level: json["level"],
        isActive: json["isActive"],
        createdAt: DateTime?.parse(json["createdAt"]),
        updatedAt: DateTime?.parse(json["updatedAt"]),
        parentCategoryId: json["parentCategoryId"],
        path: json["path"],
    );

    Map<dynamic, dynamic> toJson() => {
        "id": id,
        "name": name,
        "description": description,
        "image": image,
        "slug": slug,
        "level": level,
        "isActive": isActive,
        "createdAt": createdAt,
        "updatedAt": updatedAt,
        "parentCategoryId": parentCategoryId,
        "path": path,
    };
}

class ProductImage {
    dynamic id;
    dynamic url;
    bool? isDefault;
    dynamic productId;

    ProductImage({
        this.id,
        this.url,
        this.isDefault,
        this.productId,
    });

    factory ProductImage.fromJson(Map<dynamic, dynamic> json) => ProductImage(
        id: json["id"],
        url: json["url"],
        isDefault: json["isDefault"],
        productId: json["productId"],
    );

    Map<dynamic, dynamic> toJson() => {
        "id": id,
        "url": url,
        "isDefault": isDefault,
        "productId": productId,
    };
}

class ProductReview {
    dynamic id;
    dynamic userId;
    dynamic productId;
    dynamic rating;
    dynamic title;
    dynamic description;
    dynamic? likes;
    dynamic? dislikes;
    dynamic? helpfulCount;
    bool? verifiedPurchase;
    dynamic status;
    DateTime? createdAt;
    DateTime? updatedAt;

    ProductReview({
        this.id,
        this.userId,
        this.productId,
        this.rating,
        this.title,
        this.description,
        this.likes,
        this.dislikes,
        this.helpfulCount,
        this.verifiedPurchase,
        this.status,
        this.createdAt,
        this.updatedAt,
    });

    factory ProductReview.fromJson(Map<dynamic, dynamic> json) => ProductReview(
        id: json["id"],
        userId: json["userId"],
        productId: json["productId"],
        rating: json["rating"],
        title: json["title"],
        description: json["description"],
        likes: json["likes"],
        dislikes: json["dislikes"],
        helpfulCount: json["helpfulCount"],
        verifiedPurchase: json["verifiedPurchase"],
        status: json["status"],
        createdAt: DateTime?.parse(json["createdAt"]),
        updatedAt: DateTime?.parse(json["updatedAt"]),
    );

    Map<dynamic, dynamic> toJson() => {
        "id": id,
        "userId": userId,
        "productId": productId,
        "rating": rating,
        "title": title,
        "description": description,
        "likes": likes,
        "dislikes": dislikes,
        "helpfulCount": helpfulCount,
        "verifiedPurchase": verifiedPurchase,
        "status": status,
        "createdAt": createdAt,
        "updatedAt": updatedAt,
    };
}

class ProductTag {
    dynamic id;
    dynamic name;
    dynamic description;
    bool? isActive;
    DateTime? createdAt;
    DateTime? updatedAt;

    ProductTag({
        this.id,
        this.name,
        this.description,
        this.isActive,
        this.createdAt,
        this.updatedAt,
    });

    factory ProductTag.fromJson(Map<dynamic, dynamic> json) => ProductTag(
        id: json["id"],
        name: json["name"],
        description: json["description"],
        isActive: json["isActive"],
        createdAt: DateTime?.parse(json["createdAt"]),
        updatedAt: DateTime?.parse(json["updatedAt"]),
    );

    Map<dynamic, dynamic> toJson() => {
        "id": id,
        "name": name,
        "description": description,
        "isActive": isActive,
        "createdAt": createdAt,
        "updatedAt": updatedAt,
    };
}

class Store {
    dynamic id;
    dynamic storeName;
    dynamic storeDescription;
    dynamic officialPhoneNumber;
    dynamic storeAddress;
    dynamic gstNumber;
    dynamic gumastaNumber;
    dynamic storePicture;
    DateTime? createdAt;
    DateTime? updatedAt;
    dynamic vendorId;
    bool? isActive;
    dynamic couponId;

    Store({
        this.id,
        this.storeName,
        this.storeDescription,
        this.officialPhoneNumber,
        this.storeAddress,
        this.gstNumber,
        this.gumastaNumber,
        this.storePicture,
        this.createdAt,
        this.updatedAt,
        this.vendorId,
        this.isActive,
        this.couponId,
    });

    factory Store.fromJson(Map<dynamic, dynamic> json) => Store(
        id: json["id"],
        storeName: json["storeName"],
        storeDescription: json["storeDescription"],
        officialPhoneNumber: json["officialPhoneNumber"],
        storeAddress: json["storeAddress"],
        gstNumber: json["gstNumber"],
        gumastaNumber: json["gumastaNumber"],
        storePicture: json["storePicture"],
        createdAt: DateTime?.parse(json["createdAt"]),
        updatedAt: DateTime?.parse(json["updatedAt"]),
        vendorId: json["vendorId"],
        isActive: json["isActive"],
        couponId: json["couponId"],
    );

    Map<dynamic, dynamic> toJson() => {
        "id": id,
        "storeName": storeName,
        "storeDescription": storeDescription,
        "officialPhoneNumber": officialPhoneNumber,
        "storeAddress": storeAddress,
        "gstNumber": gstNumber,
        "gumastaNumber": gumastaNumber,
        "storePicture": storePicture,
        "createdAt": createdAt,
        "updatedAt": updatedAt,
        "vendorId": vendorId,
        "isActive": isActive,
        "couponId": couponId,
    };
}
