package com.airlock.iam.plugin.configeditor.rendering;

import com.airlock.iam.plugin.api.annotation.property.EnumProperty;
import com.airlock.iam.plugin.configeditor.data.PropertyAdapter;
import com.airlock.iam.plugin.configeditor.field.MedusaEnumField;
import com.airlock.iam.plugin.framework.domain.model.property.EnumPropertyTranslator;
import com.vaadin.v7.ui.Field;

public class VaadinEnumPropertyRenderer extends VaadinPropertyRenderer<EnumProperty, Object> {
   @Override
   public Field<Object> createField(PropertyAdapter<EnumProperty> adapter) {
      EnumProperty prop = (EnumProperty)adapter.getFieldAnnotation();
      MedusaEnumField field = new MedusaEnumField(adapter, false);
      Enum<?> enumDefault = (Enum<?>)adapter.getDefaultValue().orElse(null);
      String defaultDisplayName = enumDefault != null ? EnumPropertyTranslator.getDisplayValue(enumDefault) : "";
      field.setInfo(
         renderDescription(adapter.getDisplayName(), prop.description(), null, defaultDisplayName, adapter.getRequiredLicenseTags(), adapter.getPropertyName())
      );
      field.setRequired(!prop.optional());
      field.fillEnums((Enum<?>[])adapter.getConfigFieldType().getEnumConstants());
      return field;
   }
}
