import { Base, IResults, ICertificateProject } from '@mentaport/common';
import { IUpdateCertProject, IUpdateCertProjectStatus, ICreateCertProject, IContractProject } from "./types";
export declare class ProjectsSDK extends Base {
    /**
     *  Function to create a new project for certificates for a user
     *
     * @param {project.contractId} ContractId of contract where adding projcect
     * @param {project.projectName} Name of project
     * @param {project.ownerName} Name of project user
     * @param {project.email} Email of project user (optional)
     * @param {project.ownerWallet} Owner wallet of user (optional)
     * @param {project.projectBaseURI} projectBaseURI of contract (optional)
     * @param {customerId} CustomerId  (optional if have more than one customer)
     *
     * @returns {IResults<ICertificateProject>} Returns if succeded the contract created
     */
    createNewCertificateProject(newProject: ICreateCertProject): Promise<IResults<ICertificateProject>>;
    /**
     *  Function to activate a project in a contract
     *
     * @param {contractId} ContractId
     * @param {projectId} ProjectId
     *
     * @returns {IResults<boolean>} Returns contract activated status
     */
    activateProject(contractId: string, projectId: string): Promise<IResults<boolean>>;
    /**
     *  Function to retrieve projects from customer in contracts
     *   - most of users only have one contract with multiple projects
     *   @param {contractId} ContractId (optional to get project just from one contract)
     *   @param {customerId} CustomerId (optional if have more than one customer)
     *
     * @returns {IResults<T>} Returns all contract
     */
    getProjects<T = ICertificateProject[]>(contractId?: string, customerId?: string): Promise<IResults<T>>;
    /**
     *  Function to retrieve project by its Id
     * @param {contractId} ContractId
     * @param {projectId} ProjectId
     * @param {customerId} CustomerId (optional if have more than one customer)
     *
     * @returns {IResults<ICertificateProject>} Returns contract
     */
    getProjectById<T = ICertificateProject>(contractId: string, projectId: string, customerId?: string): Promise<IResults<T>>;
    /**
     *  Function to update project before it is activated.
     *
     *  @param {updateProject} Information to update
     *  @param {customerId} CustomerId (optional if have more than one customer)
     *
    * @returns {IResults<ICertificateProject>} Returns updated contract
    */
    updateProjectById<T = ICertificateProject>(updateProject: IUpdateCertProject): Promise<IResults<T>>;
    /**
     *  Function to update project status after being activated
     *
     *  @param {updateProjectStatus} Status to update
     *   @param {customerId} CustomerId (optional if have more than one customer)
     *
    * @returns {IResults<ICertificateProject>} Returns updated contract
    */
    updateProjectStatusById<T = ICertificateProject>(updateProjectStatus: IUpdateCertProjectStatus): Promise<IResults<T>>;
    /**
     *  Function to retrieve contracts from customer
     *  All contracts will be return if all is true (active and non active)
     *  @param {allContracts} Boolean to get all contracts, not just active
     *
     * @returns {IResults<T>} Returns  contract
     */
    getContracts<T = IContractProject[]>(allContracts: boolean): Promise<IResults<T>>;
}
