package com.airlock.iam.admin.application.service.token.cronto;

import com.airlock.iam.base.misc.data.OptionalArray;
import com.airlock.iam.base.misc.data.OptionalValue;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.Date;
import lombok.NonNull;

public class CrontoActivationCodeUpdateData {
   @NonNull
   private final String codeId;
   @NonNull
   private OptionalValue<Date> validFrom;
   @NonNull
   private OptionalValue<Date> validTo;
   @NonNull
   private OptionalValue<Integer> allowedNumberOfActivations;
   @NonNull
   private OptionalArray<String> allowedPlatforms;
   @NonNull
   private OptionalArray<String> printingOptions;

   @SuppressFBWarnings(justification = "generated code")
   CrontoActivationCodeUpdateData(
      @NonNull String codeId,
      @NonNull OptionalValue<Date> validFrom,
      @NonNull OptionalValue<Date> validTo,
      @NonNull OptionalValue<Integer> allowedNumberOfActivations,
      @NonNull OptionalArray<String> allowedPlatforms,
      @NonNull OptionalArray<String> printingOptions
   ) {
      if (codeId == null) {
         throw new NullPointerException("codeId is marked non-null but is null");
      }

      if (validFrom == null) {
         throw new NullPointerException("validFrom is marked non-null but is null");
      }

      if (validTo == null) {
         throw new NullPointerException("validTo is marked non-null but is null");
      }

      if (allowedNumberOfActivations == null) {
         throw new NullPointerException("allowedNumberOfActivations is marked non-null but is null");
      }

      if (allowedPlatforms == null) {
         throw new NullPointerException("allowedPlatforms is marked non-null but is null");
      }

      if (printingOptions == null) {
         throw new NullPointerException("printingOptions is marked non-null but is null");
      }

      this.codeId = codeId;
      this.validFrom = validFrom;
      this.validTo = validTo;
      this.allowedNumberOfActivations = allowedNumberOfActivations;
      this.allowedPlatforms = allowedPlatforms;
      this.printingOptions = printingOptions;
   }

   @SuppressFBWarnings(justification = "generated code")
   public static CrontoActivationCodeUpdateData.CrontoActivationCodeUpdateDataBuilder builder() {
      return new CrontoActivationCodeUpdateData.CrontoActivationCodeUpdateDataBuilder();
   }

   @NonNull
   @SuppressFBWarnings(justification = "generated code")
   public String getCodeId() {
      return this.codeId;
   }

   @NonNull
   @SuppressFBWarnings(justification = "generated code")
   public OptionalValue<Date> getValidFrom() {
      return this.validFrom;
   }

   @NonNull
   @SuppressFBWarnings(justification = "generated code")
   public OptionalValue<Date> getValidTo() {
      return this.validTo;
   }

   @NonNull
   @SuppressFBWarnings(justification = "generated code")
   public OptionalValue<Integer> getAllowedNumberOfActivations() {
      return this.allowedNumberOfActivations;
   }

   @NonNull
   @SuppressFBWarnings(justification = "generated code")
   public OptionalArray<String> getAllowedPlatforms() {
      return this.allowedPlatforms;
   }

   @NonNull
   @SuppressFBWarnings(justification = "generated code")
   public OptionalArray<String> getPrintingOptions() {
      return this.printingOptions;
   }

   @SuppressFBWarnings(justification = "generated code")
   public static class CrontoActivationCodeUpdateDataBuilder {
      @SuppressFBWarnings(justification = "generated code")
      private String codeId;
      @SuppressFBWarnings(justification = "generated code")
      private OptionalValue<Date> validFrom;
      @SuppressFBWarnings(justification = "generated code")
      private OptionalValue<Date> validTo;
      @SuppressFBWarnings(justification = "generated code")
      private OptionalValue<Integer> allowedNumberOfActivations;
      @SuppressFBWarnings(justification = "generated code")
      private OptionalArray<String> allowedPlatforms;
      @SuppressFBWarnings(justification = "generated code")
      private OptionalArray<String> printingOptions;

      @SuppressFBWarnings(justification = "generated code")
      CrontoActivationCodeUpdateDataBuilder() {
      }

      @SuppressFBWarnings(justification = "generated code")
      public CrontoActivationCodeUpdateData.CrontoActivationCodeUpdateDataBuilder codeId(@NonNull String codeId) {
         if (codeId == null) {
            throw new NullPointerException("codeId is marked non-null but is null");
         }

         this.codeId = codeId;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public CrontoActivationCodeUpdateData.CrontoActivationCodeUpdateDataBuilder validFrom(@NonNull OptionalValue<Date> validFrom) {
         if (validFrom == null) {
            throw new NullPointerException("validFrom is marked non-null but is null");
         }

         this.validFrom = validFrom;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public CrontoActivationCodeUpdateData.CrontoActivationCodeUpdateDataBuilder validTo(@NonNull OptionalValue<Date> validTo) {
         if (validTo == null) {
            throw new NullPointerException("validTo is marked non-null but is null");
         }

         this.validTo = validTo;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public CrontoActivationCodeUpdateData.CrontoActivationCodeUpdateDataBuilder allowedNumberOfActivations(
         @NonNull OptionalValue<Integer> allowedNumberOfActivations
      ) {
         if (allowedNumberOfActivations == null) {
            throw new NullPointerException("allowedNumberOfActivations is marked non-null but is null");
         }

         this.allowedNumberOfActivations = allowedNumberOfActivations;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public CrontoActivationCodeUpdateData.CrontoActivationCodeUpdateDataBuilder allowedPlatforms(@NonNull OptionalArray<String> allowedPlatforms) {
         if (allowedPlatforms == null) {
            throw new NullPointerException("allowedPlatforms is marked non-null but is null");
         }

         this.allowedPlatforms = allowedPlatforms;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public CrontoActivationCodeUpdateData.CrontoActivationCodeUpdateDataBuilder printingOptions(@NonNull OptionalArray<String> printingOptions) {
         if (printingOptions == null) {
            throw new NullPointerException("printingOptions is marked non-null but is null");
         }

         this.printingOptions = printingOptions;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public CrontoActivationCodeUpdateData build() {
         return new CrontoActivationCodeUpdateData(
            this.codeId, this.validFrom, this.validTo, this.allowedNumberOfActivations, this.allowedPlatforms, this.printingOptions
         );
      }

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public String toString() {
         return "CrontoActivationCodeUpdateData.CrontoActivationCodeUpdateDataBuilder(codeId="
            + this.codeId
            + ", validFrom="
            + this.validFrom
            + ", validTo="
            + this.validTo
            + ", allowedNumberOfActivations="
            + this.allowedNumberOfActivations
            + ", allowedPlatforms="
            + this.allowedPlatforms
            + ", printingOptions="
            + this.printingOptions
            + ")";
      }
   }
}
