import 'package:krow/features/invoice/data/models/invoice_model.dart';

class InvoiceListEntity {
  final String id;
  final InvoiceStatus status;
  String? cursor;
  final String invoiceNumber;
  final String eventName;
  final int count;
  final double value;
  final DateTime date;
  final DateTime dueAt;
  final String? poNumber;

  final InvoiceModel? invoiceModel;

  InvoiceListEntity({
    required this.id,
    required this.status,
    required this.invoiceNumber,
    required this.eventName,
    required this.count,
    required this.value,
    required this.date,
    required this.dueAt,
    this.poNumber,
    this.cursor,
    this.invoiceModel,
  });

  InvoiceListEntity copyWith({
    String? id,
    String? cursor,
    InvoiceStatus? status,
    String? invoiceNumber,
    String? eventName,
    int? count,
    double? value,
    DateTime? date,
    DateTime? dueAt,
    String? poNumber,
  }) {
    return InvoiceListEntity(
      id: id ?? this.id,
      cursor: cursor ?? this.cursor,
      status: status ?? this.status,
      invoiceNumber: invoiceNumber ?? this.invoiceNumber,
      eventName: eventName ?? this.eventName,
      count: count ?? this.count,
      value: value ?? this.value,
      date: date ?? this.date,
      dueAt: date ?? this.dueAt,
    );
  }

  InvoiceListEntity.fromModel(InvoiceModel model, {this.cursor})
      : id = model.id,
        poNumber = model.event?.purchaseOrder,
        status = model.status,
        invoiceNumber = model.event?.id ?? '',
        eventName = model.event!.name,
        count = model.items?.length?? 0,
        value = (model.total ?? 0.0),
        date = DateTime.parse(model.event?.date ?? ''),
        dueAt = DateTime.parse(model.dueAt ?? ''),
        invoiceModel = model;

  InvoiceListEntity.empty()
      : id = 'INV-20250113-12345',
        status = InvoiceStatus.open,
        invoiceNumber = 'INV-20250113-12345',
        eventName = 'Event Name',
        count = 16,
        value = 1230,
        poNumber = 'PO-123456',
        date = DateTime.now(),
        dueAt = DateTime.now(),
        invoiceModel = null;
}
