class Affiliate {
  constructor({
    id = null,
    name = '',
    description = '',
    url = '',
    object_storage_id = null,
    original_filename = null,
    category = '',
    is_active = true,
    commission_rate = null,
    created_at = null,
    updated_at = null
  }) {
    this.id = id;
    this.name = name;
    this.description = description;
    this.url = url;
    this.object_storage_id = object_storage_id;
    this.original_filename = original_filename;
    this.category = category;
    this.is_active = is_active;
    this.commission_rate = commission_rate;
    this.created_at = created_at;
    this.updated_at = updated_at;
  }

  static fromDbRow(row) {
    if (!row) return null;
    return new Affiliate({
      id: row.id,
      name: row.name,
      description: row.description,
      url: row.url,
      object_storage_id: row.object_storage_id,
      original_filename: row.original_filename,
      category: row.category,
      is_active: row.is_active === 1 || row.is_active === true,
      commission_rate: row.commission_rate,
      created_at: row.created_at,
      updated_at: row.updated_at
    });
  }

  toJSON() {
    return {
      id: this.id,
      name: this.name,
      description: this.description,
      url: this.url,
      object_storage_id: this.object_storage_id,
      original_filename: this.original_filename,
      category: this.category,
      is_active: this.is_active,
      commission_rate: this.commission_rate,
      created_at: this.created_at,
      updated_at: this.updated_at
    };
  }
}

module.exports = Affiliate;
