import { ContractTransaction, BigNumber } from 'ethers';
import { Timestamp } from '@energyweb/utils-general';
import { IShareInCertificate } from './CertificateUtils';
import { IBlockchainProperties } from './BlockchainProperties';
import { IOwnershipCommitmentProof } from '../utils/PreciseProofUtils';
export interface IClaimData {
    beneficiary: string;
    location: string;
    countryCode: string;
    periodStartDate: string;
    periodEndDate: string;
    purpose: string;
}
export interface IData {
    deviceId: string;
    generationStartTime: Timestamp;
    generationEndTime: Timestamp;
    metadata: string;
}
export interface IClaim {
    id: number;
    from: string;
    to: string;
    topic: string;
    value: string;
    claimData: IClaimData;
}
export interface ICertificate extends IData {
    id: number;
    issuer: string;
    creationTime: Timestamp;
    creationTransactionHash: string;
    owners: IShareInCertificate;
    claimers: IShareInCertificate;
}
export declare class Certificate implements ICertificate {
    id: number;
    blockchainProperties: IBlockchainProperties;
    deviceId: string;
    generationStartTime: Timestamp;
    generationEndTime: Timestamp;
    issuer: string;
    creationTime: Timestamp;
    creationTransactionHash: string;
    initialized: boolean;
    metadata: string;
    owners: IShareInCertificate;
    claimers: IShareInCertificate;
    constructor(id: number, blockchainProperties: IBlockchainProperties);
    /**
    *
    *
    * @description Uses the Issuer contract to allow direct issuance of a certificate
    *
    */
    static create(to: string, value: BigNumber, generationStartTime: Timestamp, generationEndTime: Timestamp, deviceId: string, blockchainProperties: IBlockchainProperties, metadata?: string): Promise<ContractTransaction>;
    /**
   *
   *
   * @description Returns the Certificate that was created in a given transaction
   *
   */
    static fromTxHash(txHash: string, blockchainProperties: IBlockchainProperties): Promise<Certificate>;
    /**
  *
  *
  * @description Uses Private Issuer contract to allow issuance of a private Certificate
  *
  */
    static createPrivate(to: string, value: BigNumber, generationStartTime: Timestamp, generationEndTime: Timestamp, deviceId: string, blockchainProperties: IBlockchainProperties, metadata?: string): Promise<{
        proof: IOwnershipCommitmentProof;
        tx: ContractTransaction;
    }>;
    /**
    *
    *
    * @description Retrieves current data for a Certificate
    *
    */
    sync(): Promise<Certificate>;
    /**
     *
     *
     * @description Uses Registry contract to allow user to claim all or part of a Certificate's volume units
     *
     */
    claim(claimData: IClaimData, amount?: BigNumber, to?: string, from?: string): Promise<ContractTransaction>;
    /**
    *
    *
    * @description Uses Registry contract to allow user to transfer part or all of a Certificate's volume units to another address
    *
    */
    transfer(to: string, amount?: BigNumber, from?: string): Promise<ContractTransaction>;
    /**
    *
    *
    * @description Uses Issuer contract to allow issuer to mint more volumes of energy units for an existing Certificate
    *
    */
    mint(to: string, volume: BigNumber): Promise<ContractTransaction>;
    /**
   *
   *
   * @description Uses Issuer contract to allow issuer to revoke a Certificate
   *
   */
    revoke(): Promise<ContractTransaction>;
    /**
     *
     *
     * @description Allows issuer to see if Certificate has been revoked
     * @returns boolean
     */
    isRevoked(): Promise<boolean>;
    /**
    *
    *
    * @description Returns all claim data for a Certificate
    *
    */
    getClaimedData(): Promise<IClaim[]>;
    /**
    *
    *
    * @description Returns the Issuance transaction for a Certificate
    *
    */
    private getIssuanceTransaction;
}
