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

import com.airlock.iam.admin.application.service.settings.AdminappCustomUrlSettings;
import com.airlock.iam.admin.domain.model.system.IamInstance;
import com.airlock.iam.admin.infrastructure.transfer.response.AdminappLanguageSettingsData;
import com.airlock.iam.admin.infrastructure.transfer.response.CustomUrlData;
import com.airlock.iam.admin.infrastructure.transfer.response.IamInstanceData;
import com.airlock.iam.common.application.locale.LocalePreferenceConfiguration;
import ma.glasnost.orika.DefaultFieldMapper;
import ma.glasnost.orika.MapperFactory;

public class AdminappAuthenticationMapper {
   public AdminappAuthenticationMapper(MapperFactory factory) {
      registerIamInstanceDataMapping(factory);
      registerAdminappLanguageSettingsDataMapping(factory);
      registerCustomUrlDataMapping(factory);
   }

   private static void registerAdminappLanguageSettingsDataMapping(MapperFactory factory) {
      factory.classMap(LocalePreferenceConfiguration.class, AdminappLanguageSettingsData.class)
         .field("validLanguages", "supportedLanguages")
         .byDefault(new DefaultFieldMapper[0])
         .register();
   }

   private static void registerIamInstanceDataMapping(MapperFactory factory) {
      factory.classMap(IamInstance.class, IamInstanceData.class).byDefault(new DefaultFieldMapper[0]).register();
   }

   private static void registerCustomUrlDataMapping(MapperFactory factory) {
      factory.classMap(AdminappCustomUrlSettings.class, CustomUrlData.class)
         .field("customLoginUrl:{customLoginUrl}", "customLoginUrl")
         .field("afterLogoutUrl:{afterLogoutUrl}", "afterLogoutUrl")
         .register();
   }
}
