/* tslint:disable */
/* eslint-disable */
/**
 * recraft.ai external api
 * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
 *
 * The version of the OpenAPI document: 0.0.1
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */


import * as runtime from '../runtime';
import type {
  CreateStyleResponse,
  ImageStyle,
  ListBasicStylesResponse,
  ListStylesResponse,
  Style,
} from '../models/index';
import {
    CreateStyleResponseFromJSON,
    CreateStyleResponseToJSON,
    ImageStyleFromJSON,
    ImageStyleToJSON,
    ListBasicStylesResponseFromJSON,
    ListBasicStylesResponseToJSON,
    ListStylesResponseFromJSON,
    ListStylesResponseToJSON,
    StyleFromJSON,
    StyleToJSON,
} from '../models/index';

export interface CreateStyleRequest {
    images: Array<Blob>;
    style: ImageStyle;
    _private?: boolean;
}

export interface DeleteStyleRequest {
    styleId: string;
}

export interface GetStyleRequest {
    styleId: string;
}

/**
 * 
 */
export class StyleApi extends runtime.BaseAPI {

    /**
     * Create Style
     */
    async createStyleRaw(requestParameters: CreateStyleRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<CreateStyleResponse>> {
        if (requestParameters['images'] == null) {
            throw new runtime.RequiredError(
                'images',
                'Required parameter "images" was null or undefined when calling createStyle().'
            );
        }

        if (requestParameters['style'] == null) {
            throw new runtime.RequiredError(
                'style',
                'Required parameter "style" was null or undefined when calling createStyle().'
            );
        }

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.accessToken) {
            const token = this.configuration.accessToken;
            const tokenString = await token("auth0", []);

            if (tokenString) {
                headerParameters["Authorization"] = `Bearer ${tokenString}`;
            }
        }
        const consumes: runtime.Consume[] = [
            { contentType: 'multipart/form-data' },
        ];
        // @ts-ignore: canConsumeForm may be unused
        const canConsumeForm = runtime.canConsumeForm(consumes);

        let formParams: { append(param: string, value: any): any };
        let useForm = false;
        // use FormData to transmit files using content-type "multipart/form-data"
        useForm = canConsumeForm;
        if (useForm) {
            formParams = new FormData();
        } else {
            formParams = new URLSearchParams();
        }

        if (requestParameters['images'] != null) {
            requestParameters['images'].forEach((element) => {
                formParams.append('images', element as any);
            })
        }

        if (requestParameters['_private'] != null) {
            formParams.append('private', requestParameters['_private'] as any);
        }

        if (requestParameters['style'] != null) {
            formParams.append('style', requestParameters['style'] as any);
        }

        const response = await this.request({
            path: `/v1/styles`,
            method: 'POST',
            headers: headerParameters,
            query: queryParameters,
            body: formParams,
        }, initOverrides);

        return new runtime.JSONApiResponse(response, (jsonValue) => CreateStyleResponseFromJSON(jsonValue));
    }

    /**
     * Create Style
     */
    async createStyle(requestParameters: CreateStyleRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<CreateStyleResponse> {
        const response = await this.createStyleRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Delete Style
     */
    async deleteStyleRaw(requestParameters: DeleteStyleRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<object>> {
        if (requestParameters['styleId'] == null) {
            throw new runtime.RequiredError(
                'styleId',
                'Required parameter "styleId" was null or undefined when calling deleteStyle().'
            );
        }

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.accessToken) {
            const token = this.configuration.accessToken;
            const tokenString = await token("auth0", []);

            if (tokenString) {
                headerParameters["Authorization"] = `Bearer ${tokenString}`;
            }
        }
        const response = await this.request({
            path: `/v1/styles/{style_id}`.replace(`{${"style_id"}}`, encodeURIComponent(String(requestParameters['styleId']))),
            method: 'DELETE',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.JSONApiResponse<any>(response);
    }

    /**
     * Delete Style
     */
    async deleteStyle(requestParameters: DeleteStyleRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<object> {
        const response = await this.deleteStyleRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Get Style
     */
    async getStyleRaw(requestParameters: GetStyleRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<Style>> {
        if (requestParameters['styleId'] == null) {
            throw new runtime.RequiredError(
                'styleId',
                'Required parameter "styleId" was null or undefined when calling getStyle().'
            );
        }

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.accessToken) {
            const token = this.configuration.accessToken;
            const tokenString = await token("auth0", []);

            if (tokenString) {
                headerParameters["Authorization"] = `Bearer ${tokenString}`;
            }
        }
        const response = await this.request({
            path: `/v1/styles/{style_id}`.replace(`{${"style_id"}}`, encodeURIComponent(String(requestParameters['styleId']))),
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.JSONApiResponse(response, (jsonValue) => StyleFromJSON(jsonValue));
    }

    /**
     * Get Style
     */
    async getStyle(requestParameters: GetStyleRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<Style> {
        const response = await this.getStyleRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * List Basic Styles
     */
    async listBasicStylesRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<ListBasicStylesResponse>> {
        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.accessToken) {
            const token = this.configuration.accessToken;
            const tokenString = await token("auth0", []);

            if (tokenString) {
                headerParameters["Authorization"] = `Bearer ${tokenString}`;
            }
        }
        const response = await this.request({
            path: `/v1/styles/basic`,
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.JSONApiResponse(response, (jsonValue) => ListBasicStylesResponseFromJSON(jsonValue));
    }

    /**
     * List Basic Styles
     */
    async listBasicStyles(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<ListBasicStylesResponse> {
        const response = await this.listBasicStylesRaw(initOverrides);
        return await response.value();
    }

    /**
     * List Styles
     */
    async listStylesRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<ListStylesResponse>> {
        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.accessToken) {
            const token = this.configuration.accessToken;
            const tokenString = await token("auth0", []);

            if (tokenString) {
                headerParameters["Authorization"] = `Bearer ${tokenString}`;
            }
        }
        const response = await this.request({
            path: `/v1/styles`,
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.JSONApiResponse(response, (jsonValue) => ListStylesResponseFromJSON(jsonValue));
    }

    /**
     * List Styles
     */
    async listStyles(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<ListStylesResponse> {
        const response = await this.listStylesRaw(initOverrides);
        return await response.value();
    }

}
