part of '../product_dtos.dart';

@freezed
class ProductVariantDto with _$ProductVariantDto {
  const ProductVariantDto._();

  const factory ProductVariantDto({
    @JsonKey(name: 'id') String? id,
    @JsonKey(name: 'product_id') String? productId,
    @JsonKey(name: 'name') String? name,
    @JsonKey(name: 'price_modifier') int? priceModifier,
    @JsonKey(name: 'cost') int? cost,
    @JsonKey(name: 'metadata') Map<String, dynamic>? metadata,
    @JsonKey(name: 'created_at') DateTime? createdAt,
    @JsonKey(name: 'updated_at') DateTime? updatedAt,
  }) = _ProductVariantDto;

  factory ProductVariantDto.fromJson(Map<String, dynamic> json) =>
      _$ProductVariantDtoFromJson(json);

  /// DTO -> Domain
  ProductVariant toDomain() => ProductVariant(
    id: id ?? '',
    productId: productId ?? '',
    name: name ?? '',
    priceModifier: priceModifier ?? 0,
    cost: cost ?? 0,
    metadata: metadata ?? {},
    createdAt: createdAt ?? DateTime.now(),
    updatedAt: updatedAt ?? DateTime.now(),
  );

  /// Domain -> DTO
  factory ProductVariantDto.fromDomain(ProductVariant variant) =>
      ProductVariantDto(
        id: variant.id,
        productId: variant.productId,
        name: variant.name,
        priceModifier: variant.priceModifier,
        cost: variant.cost,
        metadata: variant.metadata,
        createdAt: variant.createdAt,
        updatedAt: variant.updatedAt,
      );
}
