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

import com.airlock.iam.admin.infrastructure.transfer.request.user.tokens.MtanTokenVerifyOtpRequest;
import com.airlock.iam.common.domain.model.otp.OneTimePasswordVerificationContext;
import java.util.Date;
import ma.glasnost.orika.CustomConverter;
import ma.glasnost.orika.MappingContext;
import ma.glasnost.orika.metadata.Type;
import org.apache.commons.codec.binary.Base64;

class VerifyOtpRequestToOtpVerificationContextConverter extends CustomConverter<MtanTokenVerifyOtpRequest, OneTimePasswordVerificationContext> {
   public OneTimePasswordVerificationContext convert(
      MtanTokenVerifyOtpRequest source, Type<? extends OneTimePasswordVerificationContext> destinationType, MappingContext mappingContext
   ) {
      String verificationValue = source.getVerificationValue();
      int separatorIndex = verificationValue.indexOf(124);
      Date expirationDate = new Date(Long.MAX_VALUE);
      String hash;
      if (separatorIndex != -1) {
         expirationDate = new Date(Long.parseLong(verificationValue.substring(separatorIndex + 1)));
         hash = verificationValue.substring(0, separatorIndex);
      } else {
         hash = verificationValue;
      }

      return OneTimePasswordVerificationContext.builder().hash(Base64.decodeBase64(hash)).expirationTime(expirationDate).build();
   }
}
