namespace InABox.DigitalMatter
{
    public abstract class DMUnknownBluetoothTag : DMBluetoothTag
    {
        public byte[] Payload { get; set; }

        public override string ID()
        {
            return "N/A";
        }

        protected override void DoDecode(IDMReadBuffer buffer)
        {
            Payload = buffer.TakeBytes(DataLength);
        }

        protected override void DoEncode(IDMWriteBuffer buffer)
        {
            buffer.AddBytes(Payload);
        }
    }

    public class DMEddystoneBluetoothTag : DMUnknownBluetoothTag
    {
        public override string Type()
        {
            return "Eddystone";
        }
    }

    public class DMIngicsiBS01BasicBluetoothTag : DMUnknownBluetoothTag
    {
        public override string Type()
        {
            return "Ingics iBS01 Basic";
        }
    }

    public class DMIngicsiBS01TemperatureBluetoothTag : DMUnknownBluetoothTag
    {
        public override string Type()
        {
            return "Ingics iBS01 Temperature";
        }
    }
    
    public class DMEddystoneTLMBluetoothTag : DMUnknownBluetoothTag
    {
        public override string Type()
        {
            return "Eddystone TLM";
        }
    }

    public class DMTechnotonES7BluetoothTag : DMUnknownBluetoothTag
    {
        public override string Type()
        {
            return "Technoton ES7";
        }
    }

    public class DMGeoboxTPMSBluetoothTag : DMUnknownBluetoothTag
    {
        public override string Type()
        {
            return "Geobox TPMS";
        }
    }

    public class DMEscortFuelBluetoothTag : DMUnknownBluetoothTag
    {
        public override string Type()
        {
            return "Escort Fuel Sensor";
        }
    }

    public class DMIngicsiBS04BluetoothTag : DMUnknownBluetoothTag
    {
        public override string Type()
        {
            return "Ingics iBS04";
        }
    }
}