package com.airlock.iam.admin.application.service.license;

import com.airlock.iam.admin.application.service.activation.ActivationStateWatcher;
import com.airlock.iam.base.api.domain.model.exception.FailureException;
import com.airlock.iam.system.property.IamSystemProperties;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.time.Duration;
import org.apache.commons.io.FileUtils;

public class LicenseDeployer {
   public ActivationStateWatcher.ActivationResult deploy(Path activeLicenseFile, String licenseText) {
      ActivationStateWatcher watcher = ActivationStateWatcher.activationStateWatcher(IamSystemProperties.getActivatedConfigsDirectory(), Duration.ofMinutes(1L));
      watcher.startActivation();
      File tempFile = null;

      try {
         tempFile = File.createTempFile("license.txt", ".tmp", activeLicenseFile.toFile().getParentFile());
         tempFile.deleteOnExit();
         Files.writeString(tempFile.toPath(), licenseText, StandardCharsets.UTF_8);
         com.airlock.iam.base.misc.io.Files.replaceFile(tempFile, activeLicenseFile.toFile());
      } catch (IOException e) {
         throw new FailureException("failed to write license text to active license file", e);
      } finally {
         FileUtils.deleteQuietly(tempFile);
      }

      return watcher.waitForDeploymentResult().activationResult();
   }
}
