namespace InnovEnergy.Units;

public readonly struct Resistance
{
    public static String Unit   => "Ω";
    public static String Symbol => "R";
    
    public Decimal Value { get; }

    public Resistance(Decimal value) => Value = value;

    public override String ToString() => Value + Unit;

    // series
    public static Resistance operator +(Resistance left, Resistance right) => new Resistance(left.Value + right.Value);
    // parallel
    public static Resistance operator |(Resistance left, Resistance right) => new Resistance(1m / (1m / left.Value + 1m / right.Value));
    
    // scalar multiplication
    public static Resistance operator *(Decimal    scalar    , Resistance resistance) => new Resistance(scalar * resistance.Value);
    public static Resistance operator *(Resistance resistance, Decimal    scalar    ) => new Resistance(scalar * resistance.Value);
    public static Resistance operator *(Int32      scalar    , Resistance resistance) => new Resistance(scalar * resistance.Value);
    public static Resistance operator *(Resistance resistance, Int32      scalar    ) => new Resistance(scalar * resistance.Value);
    public static Resistance operator /(Resistance resistance, Decimal    scalar    ) => new Resistance(resistance.Value / scalar);
    public static Resistance operator /(Resistance resistance, Int32      scalar    ) => new Resistance(resistance.Value / scalar);
    
    
    // U=RI
    public static Voltage operator *(Resistance resistance, Current current) => new Voltage(resistance.Value* current.Value);
    
    
    
    // public static Voltage operator /(Power power, Current current) => new Voltage(power.Value / current.Value);
    // public static Current operator /(Power power, Voltage voltage) => new Current(power.Value / voltage.Value);
}