class ProductManualModel {
  final String id;
  final String title;
  final ProductManualDetails productManual;
  final String createdAt;
  final String updatedAt;

  ProductManualModel({
    required this.id,
    required this.title,
    required this.productManual,
    required this.createdAt,
    required this.updatedAt,
  });

  // Factory method to create a ProductManualModel from JSON
  factory ProductManualModel.fromJson(Map<String, dynamic> json) {
    return ProductManualModel(
      id: json['_id'] ?? '',
      title: json['title'] ?? '',
      productManual: ProductManualDetails.fromJson(json['product_manual']),
      createdAt: json['createdAt'],
      updatedAt: json['updatedAt'],
    );
  }

  // Method to convert a ProductManualModel to JSON
  Map<String, dynamic> toJson() {
    return {
      '_id': id,
      'title': title,
      'product_manual': productManual.toJson(),
      'createdAt': createdAt,
      'updatedAt': updatedAt,
    };
  }

  // Override toString for better debugging
  @override
  String toString() {
    return 'ProductManualModel(id: $id, title: $title, productManual: $productManual, createdAt: $createdAt, updatedAt: $updatedAt)';
  }
}

class ProductManualDetails {
  final String publicId;
  final String url;
  final String filename;

  ProductManualDetails({
    required this.publicId,
    required this.url,
    required this.filename,
  });

  // Factory method to create ProductManualDetails from JSON
  factory ProductManualDetails.fromJson(Map<String, dynamic> json) {
    return ProductManualDetails(
      publicId: json['public_id'] ?? '',
      url: json['url'] ?? '',
      filename: json['filename'] ?? '',
    );
  }

  // Method to convert ProductManualDetails to JSON
  Map<String, dynamic> toJson() {
    return {
      'public_id': publicId,
      'url': url,
      'filename': filename,
    };
  }

  // Override toString for better debugging
  @override
  String toString() {
    return 'ProductManualDetails(publicId: $publicId, url: $url, filename: $filename)';
  }
}

// Model for handling the entire response
class ProductManualResponse {
  final bool success;
  final List<ProductManualModel> productManuals;
  final int total;

  ProductManualResponse({
    required this.success,
    required this.productManuals,
    required this.total,
  });

  // Factory method to create ProductManualResponse from JSON
  factory ProductManualResponse.fromJson(Map<String, dynamic> json) {
    var productList = (json['productManuals'] as List)
        .map((manual) => ProductManualModel.fromJson(manual))
        .toList();

    return ProductManualResponse(
      success: json['success'] ?? false,
      productManuals: productList,
      total: json['total'] ?? 0,
    );
  }

  // Method to convert ProductManualResponse to JSON
  Map<String, dynamic> toJson() {
    return {
      'success': success,
      'productManuals': productManuals.map((manual) => manual.toJson()).toList(),
      'total': total,
    };
  }

  // Override toString for better debugging
  @override
  String toString() {
    return 'ProductManualResponse(success: $success, total: $total, productManuals: $productManuals)';
  }
}
