import { WflObject } from '../model/wfl/wflobject.js';
import '../model/wfl/attachment.js';
import '../model/wfl/edition-renditions-info.js';
import '../model/wfl/edition.js';
import '../model/wfl/rendition-type-info.js';
import '../model/wfl/element.js';
import '../model/wfl/indesign-article.js';
import '../model/wfl/message.js';
import '../model/wfl/sticky-info.js';
import '../model/wfl/message-list.js';
import '../model/wfl/metadata.js';
import '../model/wfl/basic-metadata.js';
import '../model/wfl/category.js';
import '../model/wfl/publication.js';
import '../model/wfl/content-metadata.js';
import '../model/wfl/extra-metadata.js';
import '../model/wfl/rights-metadata.js';
import '../model/wfl/source-metadata.js';
import '../model/wfl/workflow-metadata.js';
import '../model/wfl/state.js';
import '../model/wfl/object-label.js';
import '../model/wfl/object-operations.js';
import '../model/wfl/param.js';
import '../model/wfl/page.js';
import '../model/wfl/placement.js';
import '../model/wfl/relation.js';
import '../model/wfl/object-info.js';
import '../model/wfl/target.js';
import '../model/wfl/issue.js';
import '../model/wfl/pub-channel.js';

interface IClient {
    /**
     *
     * @returns true when logged in
     */
    isLoggedOn(): boolean;
    /**
     *
     * @param configurationId
     * @returns true when logged in
     */
    logon(configurationId: string): Promise<boolean>;
    getBaseUrl(): string;
    /**
     * @param studioUrl The
     * @param appname The application name
     * @param username The WoodWing Studio username
     * @param password The WoodWing Studio password
     * @param requestId Optional: The requestID
     * @param configurationId Optional: The configurationID
     * @returns The new or given ConfigurationId
     * @throws QqAwsServiceStudioClientClientError when the registration fails.
     */
    register(studioUrl: string, appname: string, username: string, password: string, requestId: string | undefined, configurationId: string | undefined): Promise<string>;
    unRegister(configurationId?: string): Promise<void>;
    /**
     *
     * @param ids The brand id(s)
     * @param requestInfo What elements to retrieve. "PubChannels","States", "Categories"
     * @param forceNew When true, ignore local cache.
     * @param requestId
     * @param configurationId
     * @returns
     */
    getPublications(ids: string[], requestInfo?: string[], forceNew?: boolean, requestId?: string, configurationId?: string): Promise<Record<string, any>[]>;
    /**
     *
     * @param forceNew When true create a new ticket instead of the cached ticket
     * @param requestId
     * @param configurationId
     * @returns
     */
    getTicket(forceNew?: boolean, requestId?: string, configurationId?: string): Promise<string>;
    /**
     *
     * @param {string} publicationId
     * @param {string} type
     * @param {string} name
     * @returns {Promise<null|object>}
     */
    getStateByName(publicationId: string, type: string, name: string): Promise<null | object>;
    createObjects(wflObjects: WflObject[], lock?: boolean): Promise<WflObject[]>;
    getObjects(objectIds: string[], rendition: string, requestInfo: string[], lock: boolean, areas: string[]): Promise<WflObject[]>;
}

export type { IClient };
