package com.airlock.iam.admin.infrastructure.mapper.prot;

import com.airlock.iam.admin.domain.model.token.generic.BooleanInputGenericTokenUiElement;
import com.airlock.iam.admin.domain.model.token.generic.DateTimeInputGenericTokenUiElement;
import com.airlock.iam.admin.domain.model.token.generic.GenericTokenUi;
import com.airlock.iam.admin.domain.model.token.generic.StringInputGenericTokenUiElement;
import com.airlock.iam.admin.domain.model.token.generic.StringValueGenericTokenUiElement;
import com.airlock.iam.admin.domain.model.token.generic.TextMessageGenericTokenUiElement;
import com.airlock.iam.admin.infrastructure.transfer.response.ui.generic.GenericTokenUiData;
import com.airlock.iam.admin.infrastructure.transfer.response.ui.generic.GenericUiBooleanInputElementData;
import com.airlock.iam.admin.infrastructure.transfer.response.ui.generic.GenericUiDateTimeInputElementData;
import com.airlock.iam.admin.infrastructure.transfer.response.ui.generic.GenericUiStringInputElementData;
import com.airlock.iam.admin.infrastructure.transfer.response.ui.generic.GenericUiStringValueElementData;
import com.airlock.iam.admin.infrastructure.transfer.response.ui.generic.GenericUiTextMessageElementData;
import com.airlock.iam.common.infrastructure.mapper.ConverterId;
import ma.glasnost.orika.DefaultFieldMapper;
import ma.glasnost.orika.MapperFactory;

public final class GenericTokenUiMapper {
   public GenericTokenUiMapper(MapperFactory factory) {
      factory.classMap(GenericTokenUi.class, GenericTokenUiData.class).byDefault(new DefaultFieldMapper[0]).register();
      factory.classMap(StringInputGenericTokenUiElement.class, GenericUiStringInputElementData.class).byDefault(new DefaultFieldMapper[0]).register();
      factory.classMap(BooleanInputGenericTokenUiElement.class, GenericUiBooleanInputElementData.class).byDefault(new DefaultFieldMapper[0]).register();
      factory.classMap(DateTimeInputGenericTokenUiElement.class, GenericUiDateTimeInputElementData.class).byDefault(new DefaultFieldMapper[0]).register();
      factory.classMap(StringValueGenericTokenUiElement.class, GenericUiStringValueElementData.class).byDefault(new DefaultFieldMapper[0]).register();
      factory.classMap(TextMessageGenericTokenUiElement.class, GenericUiTextMessageElementData.class)
         .byDefault(new DefaultFieldMapper[0])
         .fieldMap("type", "messageType")
         .converter(ConverterId.LOWERCASE_ENUM_CONVERTER.getId())
         .add()
         .register();
   }
}
