package com.google.webauthn.gaedemo.objects;

import java.util.ArrayList;
import java.util.List;

import co.nstant.in.cbor.model.ByteString;
import co.nstant.in.cbor.model.DataItem;
import co.nstant.in.cbor.model.Map;
import co.nstant.in.cbor.model.UnicodeString;
import co.nstant.in.cbor.model.UnsignedInteger;

public class CableRegistrationData implements AttestationExtension {
  public static final String KEY = "cableRegistration";
  List<Integer> versions;
  Integer maxVersion;
  byte[] publicKey;

  public CableRegistrationData() {
  }

  public static CableRegistrationData parseFromCbor(DataItem cborCableData) {
    CableRegistrationData cableData = new CableRegistrationData();

    Map cborMap = (Map) cborCableData;

    for (DataItem data : cborMap.getKeys()) {
      if (data instanceof UnicodeString) {
        switch (((UnicodeString) data).getString()) {
          case "version":
            cableData.versions = new ArrayList<>();
            cableData.versions.add(((UnsignedInteger) cborMap.get(data)).getValue().intValue());
            break;
          case "maxVersion":
            cableData.maxVersion = ((UnsignedInteger) cborMap.get(data)).getValue().intValue();
            break;
          case "authenticatorPublicKey":
            cableData.publicKey = ((ByteString) cborMap.get(data)).getBytes();
            break;
        }
      }
    }
    return cableData;
  }

  @Override
  public Type getType() {
    return Type.CABLE;
  }
}