use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use crate::domain::sector::enums::EnergyEfficiencyClass;
use crate::domain::sector::metrics::RepairabilityScore;
use super::shared::{CriticalRawMaterial, SvhcSubstance};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct ElectronicsData {
pub gtin: String,
pub product_category: String,
pub energy_efficiency_class: EnergyEfficiencyClass,
pub co2e_per_unit_kg: f64,
#[serde(skip_serializing_if = "Option::is_none")]
pub repairability_score: Option<RepairabilityScore>,
#[serde(skip_serializing_if = "Option::is_none")]
pub spare_parts_available: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub repair_manual_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub disassembly_instructions_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub svhc_substances: Option<Vec<SvhcSubstance>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub rohs_compliant: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub critical_raw_materials: Option<Vec<CriticalRawMaterial>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub recycled_content_pct: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub standby_power_w: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub expected_lifetime_years: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub firmware_update_until: Option<DateTime<Utc>>,
}