using Serilog;

namespace adas_core.module.LightBeacons.Devices;

public abstract class LightBeaconAbstract(string host, string password)
{
    public string Host = host;
    public string Password = password;


    public abstract void CodeBlue(object entry);

    public abstract void CodeRed(object entry);

    public abstract void CodeYellow(object entry);

    public abstract void PowerOffLed(object entry);

    public static LightBeaconAbstract? GetBeaconDevice(string driver, string host, string password)
    {
        var modelType = Type.GetType($"adas_core.Drivers.LightBeacon.{driver}");
        if (modelType == null)
        {
            Log.Debug($"LightBeacon modelType not found: driver {driver}, host {host}, password {password}");
            return null;
        }

        var ctor = modelType.GetConstructor([typeof(string), typeof(string)]);
        if (ctor == null)
            return null;

        return (LightBeaconAbstract)ctor.Invoke([host, password]);
    }
}