/*
 * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
 */

import * as z from "zod/v3";
import { safeParse } from "../lib/schemas.js";
import { ClosedEnum } from "../types/enums.js";
import { Result as SafeParseResult } from "../types/fp.js";
import * as types from "../types/primitives.js";
import { smartUnion } from "../types/smartUnion.js";
import { SDKValidationError } from "./sdkvalidationerror.js";

export type ListTeamFlagSettingsRequest = {
  /**
   * Maximum number of settings to return.
   */
  limit?: number | undefined;
  /**
   * Pagination cursor to continue from.
   */
  cursor?: string | undefined;
  /**
   * The Team identifier to perform the request on behalf of.
   */
  teamId: string;
  /**
   * The Team slug to perform the request on behalf of.
   */
  slug?: string | undefined;
};

export const ListTeamFlagSettingsResponseBodyTypeName = {
  Settings: "settings",
} as const;
export type ListTeamFlagSettingsResponseBodyTypeName = ClosedEnum<
  typeof ListTeamFlagSettingsResponseBodyTypeName
>;

export type ResponseBodyLabels = {
  label: string;
  value: string;
};

export type ResponseBodyAttributes = {
  key: string;
  type: string;
  labels?: Array<ResponseBodyLabels> | undefined;
};

export type ResponseBodyEntities = {
  kind: string;
  label: string;
  attributes: Array<ResponseBodyAttributes>;
};

export type ListTeamFlagSettingsResponseBodyMetadata = {
  activeFlagCount: number;
  archivedFlagCount: number;
  segmentCount: number;
  packSizeInBytes: number;
  packRevision?: number | undefined;
  configUpdatedAt?: number | undefined;
};

export type ResponseBodyData = {
  typeName: ListTeamFlagSettingsResponseBodyTypeName;
  projectId: string;
  ownerId?: string | undefined;
  enabled: boolean;
  environments: Array<string>;
  entities: Array<ResponseBodyEntities>;
  createdAt?: number | undefined;
  updatedAt?: number | undefined;
  metadata: ListTeamFlagSettingsResponseBodyMetadata;
};

export type ListTeamFlagSettingsResponseBodyPagination = {
  next: string | null;
};

export type ListTeamFlagSettingsResponseBody2 = {
  data: Array<ResponseBodyData>;
  pagination: ListTeamFlagSettingsResponseBodyPagination;
};

export type ListTeamFlagSettingsResponseBody1 = {};

export type ListTeamFlagSettingsResponseBody =
  | ListTeamFlagSettingsResponseBody2
  | ListTeamFlagSettingsResponseBody1;

/** @internal */
export type ListTeamFlagSettingsRequest$Outbound = {
  limit: number;
  cursor?: string | undefined;
  teamId: string;
  slug?: string | undefined;
};

/** @internal */
export const ListTeamFlagSettingsRequest$outboundSchema: z.ZodType<
  ListTeamFlagSettingsRequest$Outbound,
  z.ZodTypeDef,
  ListTeamFlagSettingsRequest
> = z.object({
  limit: z.number().int().default(20),
  cursor: z.string().optional(),
  teamId: z.string(),
  slug: z.string().optional(),
});

export function listTeamFlagSettingsRequestToJSON(
  listTeamFlagSettingsRequest: ListTeamFlagSettingsRequest,
): string {
  return JSON.stringify(
    ListTeamFlagSettingsRequest$outboundSchema.parse(
      listTeamFlagSettingsRequest,
    ),
  );
}

/** @internal */
export const ListTeamFlagSettingsResponseBodyTypeName$inboundSchema:
  z.ZodNativeEnum<typeof ListTeamFlagSettingsResponseBodyTypeName> = z
    .nativeEnum(ListTeamFlagSettingsResponseBodyTypeName);

/** @internal */
export const ResponseBodyLabels$inboundSchema: z.ZodType<
  ResponseBodyLabels,
  z.ZodTypeDef,
  unknown
> = z.object({
  label: types.string(),
  value: types.string(),
});

export function responseBodyLabelsFromJSON(
  jsonString: string,
): SafeParseResult<ResponseBodyLabels, SDKValidationError> {
  return safeParse(
    jsonString,
    (x) => ResponseBodyLabels$inboundSchema.parse(JSON.parse(x)),
    `Failed to parse 'ResponseBodyLabels' from JSON`,
  );
}

/** @internal */
export const ResponseBodyAttributes$inboundSchema: z.ZodType<
  ResponseBodyAttributes,
  z.ZodTypeDef,
  unknown
> = z.object({
  key: types.string(),
  type: types.string(),
  labels: types.optional(
    z.array(z.lazy(() => ResponseBodyLabels$inboundSchema)),
  ),
});

export function responseBodyAttributesFromJSON(
  jsonString: string,
): SafeParseResult<ResponseBodyAttributes, SDKValidationError> {
  return safeParse(
    jsonString,
    (x) => ResponseBodyAttributes$inboundSchema.parse(JSON.parse(x)),
    `Failed to parse 'ResponseBodyAttributes' from JSON`,
  );
}

/** @internal */
export const ResponseBodyEntities$inboundSchema: z.ZodType<
  ResponseBodyEntities,
  z.ZodTypeDef,
  unknown
> = z.object({
  kind: types.string(),
  label: types.string(),
  attributes: z.array(z.lazy(() => ResponseBodyAttributes$inboundSchema)),
});

export function responseBodyEntitiesFromJSON(
  jsonString: string,
): SafeParseResult<ResponseBodyEntities, SDKValidationError> {
  return safeParse(
    jsonString,
    (x) => ResponseBodyEntities$inboundSchema.parse(JSON.parse(x)),
    `Failed to parse 'ResponseBodyEntities' from JSON`,
  );
}

/** @internal */
export const ListTeamFlagSettingsResponseBodyMetadata$inboundSchema: z.ZodType<
  ListTeamFlagSettingsResponseBodyMetadata,
  z.ZodTypeDef,
  unknown
> = z.object({
  activeFlagCount: types.number(),
  archivedFlagCount: types.number(),
  segmentCount: types.number(),
  packSizeInBytes: types.number(),
  packRevision: types.optional(types.number()),
  configUpdatedAt: types.optional(types.number()),
});

export function listTeamFlagSettingsResponseBodyMetadataFromJSON(
  jsonString: string,
): SafeParseResult<
  ListTeamFlagSettingsResponseBodyMetadata,
  SDKValidationError
> {
  return safeParse(
    jsonString,
    (x) =>
      ListTeamFlagSettingsResponseBodyMetadata$inboundSchema.parse(
        JSON.parse(x),
      ),
    `Failed to parse 'ListTeamFlagSettingsResponseBodyMetadata' from JSON`,
  );
}

/** @internal */
export const ResponseBodyData$inboundSchema: z.ZodType<
  ResponseBodyData,
  z.ZodTypeDef,
  unknown
> = z.object({
  typeName: ListTeamFlagSettingsResponseBodyTypeName$inboundSchema,
  projectId: types.string(),
  ownerId: types.optional(types.string()),
  enabled: types.boolean(),
  environments: z.array(types.string()),
  entities: z.array(z.lazy(() => ResponseBodyEntities$inboundSchema)),
  createdAt: types.optional(types.number()),
  updatedAt: types.optional(types.number()),
  metadata: z.lazy(() =>
    ListTeamFlagSettingsResponseBodyMetadata$inboundSchema
  ),
});

export function responseBodyDataFromJSON(
  jsonString: string,
): SafeParseResult<ResponseBodyData, SDKValidationError> {
  return safeParse(
    jsonString,
    (x) => ResponseBodyData$inboundSchema.parse(JSON.parse(x)),
    `Failed to parse 'ResponseBodyData' from JSON`,
  );
}

/** @internal */
export const ListTeamFlagSettingsResponseBodyPagination$inboundSchema:
  z.ZodType<ListTeamFlagSettingsResponseBodyPagination, z.ZodTypeDef, unknown> =
    z.object({
      next: types.nullable(types.string()),
    });

export function listTeamFlagSettingsResponseBodyPaginationFromJSON(
  jsonString: string,
): SafeParseResult<
  ListTeamFlagSettingsResponseBodyPagination,
  SDKValidationError
> {
  return safeParse(
    jsonString,
    (x) =>
      ListTeamFlagSettingsResponseBodyPagination$inboundSchema.parse(
        JSON.parse(x),
      ),
    `Failed to parse 'ListTeamFlagSettingsResponseBodyPagination' from JSON`,
  );
}

/** @internal */
export const ListTeamFlagSettingsResponseBody2$inboundSchema: z.ZodType<
  ListTeamFlagSettingsResponseBody2,
  z.ZodTypeDef,
  unknown
> = z.object({
  data: z.array(z.lazy(() => ResponseBodyData$inboundSchema)),
  pagination: z.lazy(() =>
    ListTeamFlagSettingsResponseBodyPagination$inboundSchema
  ),
});

export function listTeamFlagSettingsResponseBody2FromJSON(
  jsonString: string,
): SafeParseResult<ListTeamFlagSettingsResponseBody2, SDKValidationError> {
  return safeParse(
    jsonString,
    (x) => ListTeamFlagSettingsResponseBody2$inboundSchema.parse(JSON.parse(x)),
    `Failed to parse 'ListTeamFlagSettingsResponseBody2' from JSON`,
  );
}

/** @internal */
export const ListTeamFlagSettingsResponseBody1$inboundSchema: z.ZodType<
  ListTeamFlagSettingsResponseBody1,
  z.ZodTypeDef,
  unknown
> = z.object({});

export function listTeamFlagSettingsResponseBody1FromJSON(
  jsonString: string,
): SafeParseResult<ListTeamFlagSettingsResponseBody1, SDKValidationError> {
  return safeParse(
    jsonString,
    (x) => ListTeamFlagSettingsResponseBody1$inboundSchema.parse(JSON.parse(x)),
    `Failed to parse 'ListTeamFlagSettingsResponseBody1' from JSON`,
  );
}

/** @internal */
export const ListTeamFlagSettingsResponseBody$inboundSchema: z.ZodType<
  ListTeamFlagSettingsResponseBody,
  z.ZodTypeDef,
  unknown
> = smartUnion([
  z.lazy(() => ListTeamFlagSettingsResponseBody2$inboundSchema),
  z.lazy(() => ListTeamFlagSettingsResponseBody1$inboundSchema),
]);

export function listTeamFlagSettingsResponseBodyFromJSON(
  jsonString: string,
): SafeParseResult<ListTeamFlagSettingsResponseBody, SDKValidationError> {
  return safeParse(
    jsonString,
    (x) => ListTeamFlagSettingsResponseBody$inboundSchema.parse(JSON.parse(x)),
    `Failed to parse 'ListTeamFlagSettingsResponseBody' from JSON`,
  );
}
