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

import com.airlock.iam.base.api.domain.model.exception.FailureException;
import com.airlock.iam.base.misc.json.JsonCoding;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import jakarta.annotation.Nullable;
import java.io.IOException;

public record AnalyticsDocument(
   String iamVersion,
   LicenseDocument license,
   int userCount,
   boolean usageAnalyticsEnabled,
   boolean runningInDocker,
   String createdAt,
   @Nullable UsageDataDocument usageData
) {
   public String toJsonString() {
      try {
         return JsonCoding.toJson(this, true, true);
      } catch (IOException e) {
         throw new FailureException(e);
      }
   }

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

   @SuppressFBWarnings(justification = "generated code")
   public static class AnalyticsDocumentBuilder {
      @SuppressFBWarnings(justification = "generated code")
      private String iamVersion;
      @SuppressFBWarnings(justification = "generated code")
      private LicenseDocument license;
      @SuppressFBWarnings(justification = "generated code")
      private int userCount;
      @SuppressFBWarnings(justification = "generated code")
      private boolean usageAnalyticsEnabled;
      @SuppressFBWarnings(justification = "generated code")
      private boolean runningInDocker;
      @SuppressFBWarnings(justification = "generated code")
      private String createdAt;
      @SuppressFBWarnings(justification = "generated code")
      private UsageDataDocument usageData;

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

      @SuppressFBWarnings(justification = "generated code")
      public AnalyticsDocument.AnalyticsDocumentBuilder iamVersion(String iamVersion) {
         this.iamVersion = iamVersion;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public AnalyticsDocument.AnalyticsDocumentBuilder license(LicenseDocument license) {
         this.license = license;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public AnalyticsDocument.AnalyticsDocumentBuilder userCount(int userCount) {
         this.userCount = userCount;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public AnalyticsDocument.AnalyticsDocumentBuilder usageAnalyticsEnabled(boolean usageAnalyticsEnabled) {
         this.usageAnalyticsEnabled = usageAnalyticsEnabled;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public AnalyticsDocument.AnalyticsDocumentBuilder runningInDocker(boolean runningInDocker) {
         this.runningInDocker = runningInDocker;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public AnalyticsDocument.AnalyticsDocumentBuilder createdAt(String createdAt) {
         this.createdAt = createdAt;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public AnalyticsDocument.AnalyticsDocumentBuilder usageData(@Nullable UsageDataDocument usageData) {
         this.usageData = usageData;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public AnalyticsDocument build() {
         return new AnalyticsDocument(
            this.iamVersion, this.license, this.userCount, this.usageAnalyticsEnabled, this.runningInDocker, this.createdAt, this.usageData
         );
      }

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public String toString() {
         return "AnalyticsDocument.AnalyticsDocumentBuilder(iamVersion="
            + this.iamVersion
            + ", license="
            + this.license
            + ", userCount="
            + this.userCount
            + ", usageAnalyticsEnabled="
            + this.usageAnalyticsEnabled
            + ", runningInDocker="
            + this.runningInDocker
            + ", createdAt="
            + this.createdAt
            + ", usageData="
            + this.usageData
            + ")";
      }
   }
}
