package pl.grzeslowski.jsupla.protocol.common.randomizers.ds;

import static pl.grzeslowski.jsupla.protocol.api.consts.ProtoConsts.SUPLA_AUTHKEY_SIZE;
import static pl.grzeslowski.jsupla.protocol.api.consts.ProtoConsts.SUPLA_CHANNELMAXCOUNT;
import static pl.grzeslowski.jsupla.protocol.api.consts.ProtoConsts.SUPLA_DEVICE_NAME_MAXSIZE;
import static pl.grzeslowski.jsupla.protocol.api.consts.ProtoConsts.SUPLA_EMAIL_MAXSIZE;
import static pl.grzeslowski.jsupla.protocol.api.consts.ProtoConsts.SUPLA_GUID_SIZE;
import static pl.grzeslowski.jsupla.protocol.api.consts.ProtoConsts.SUPLA_SERVER_NAME_MAXSIZE;
import static pl.grzeslowski.jsupla.protocol.api.consts.ProtoConsts.SUPLA_SOFTVER_MAXSIZE;

import io.github.benas.randombeans.api.Randomizer;
import pl.grzeslowski.jsupla.protocol.api.structs.ds.SuplaDeviceChannelB;
import pl.grzeslowski.jsupla.protocol.api.structs.ds.SuplaRegisterDeviceD;
import pl.grzeslowski.jsupla.protocol.common.RandomSupla;

public class SuplaRegisterDeviceDRandomizer implements Randomizer<SuplaRegisterDeviceD> {
	private final RandomSupla randomSupla;

	public SuplaRegisterDeviceDRandomizer(final RandomSupla randomSupla) {
		this.randomSupla = randomSupla;
	}

	@Override
	public SuplaRegisterDeviceD getRandomValue() {
		final short channelCount = randomSupla.nextUnsignedByte((short) SUPLA_CHANNELMAXCOUNT);
		final SuplaDeviceChannelB[] channels = randomSupla.objects(SuplaDeviceChannelB.class, channelCount)
				.toArray(SuplaDeviceChannelB[]::new);
		return new SuplaRegisterDeviceD(
				randomSupla.nextByteArray(SUPLA_EMAIL_MAXSIZE),
				randomSupla.nextByteArray(SUPLA_AUTHKEY_SIZE),
				randomSupla.nextByteArray(SUPLA_GUID_SIZE),
				randomSupla.nextByteArray(SUPLA_DEVICE_NAME_MAXSIZE),
				randomSupla.nextByteArray(SUPLA_SOFTVER_MAXSIZE),
				randomSupla.nextByteArray(SUPLA_SERVER_NAME_MAXSIZE),
				channelCount,
				channels
		);
	}
}

@@ -1040,17 +1040,20 @@
 iceD%3E %7B%0A
-%09
+    
 private 
@@ -1084,17 +1084,20 @@
 Supla;%0A%0A
-%09
+    
 public S
@@ -1159,18 +1159,24 @@
 upla) %7B%0A
-%09%09
+        
 this.ran
@@ -1203,13 +1203,19 @@
 la;%0A
-%09%7D%0A%0A%09
+    %7D%0A%0A    
 @Ove
@@ -1220,17 +1220,20 @@
 verride%0A
-%09
+    
 public S
@@ -1271,18 +1271,24 @@
 lue() %7B%0A
-%09%09
+        
 final sh
@@ -1367,18 +1367,24 @@
 COUNT);%0A
-%09%09
+        
 final Su
@@ -1475,20 +1475,63 @@
 lCount)%0A
-%09%09%09%09
+                                               
 .toArray
@@ -1560,18 +1560,24 @@
 ::new);%0A
-%09%09
+        
 return n
@@ -1601,20 +1601,63 @@
 eviceD(%0A
-%09%09%09%09
+                                               
 randomSu
@@ -1700,111 +1700,240 @@
 E),%0A
-%09%09%09%09randomSupla.nextByteArray(SUPLA_AUTHKEY_SIZE),%0A%09%09%09%09randomSupla.nextByteArray(SUPLA_GUID_SIZE),%0A%09%09%09%09
+                                               randomSupla.nextByteArray(SUPLA_AUTHKEY_SIZE),%0A                                               randomSupla.nextByteArray(SUPLA_GUID_SIZE),%0A                                               
 rand
@@ -1974,36 +1974,79 @@
 _NAME_MAXSIZE),%0A
-%09%09%09%09
+                                               
 randomSupla.next
@@ -2079,20 +2079,63 @@
 XSIZE),%0A
-%09%09%09%09
+                                               
 randomSu
@@ -2184,45 +2184,140 @@
 E),%0A
-%09%09%09%09channelCount,%0A%09%09%09%09channels%0A%09%09);%0A%09
+                                               channelCount,%0A                                               channels%0A        );%0A    
 %7D%0A%7D%0A

Fix formatting