import { MessageType } from "./constants";
export interface GiftCardPurchaseItem {
    amount: number;
    productId: string;
    quantity: number;
}
export interface GiftCardPurchaseRequest {
    corelationId: string;
    timestamp: number;
    userId: string;
    orderId: string;
    items: GiftCardPurchaseItem[];
}
export interface GiftCardPurchaseResponse {
    orderId: string;
    productId: string;
    quantity: number;
    userId: string;
    status: string;
    redeem: RedeemDto;
    timestamp: number;
    totalCost?: number;
}
export interface RedeemDto {
    raw?: any;
    redemption_details?: string;
    brand_logo?: string;
    redemption_url?: string;
    pin_code?: string;
    expiration_date?: string;
    amount?: string;
    card_number?: string;
    iccid?: string;
    smdp_address?: string;
    activation_code?: string;
    barcode_url?: string;
    barcode_format?: string;
    barcode_number?: string;
    remaining_percent?: string;
}
export interface PurchaseResponse<T> {
    code: PurchaseStatus;
    message: string;
    data: T;
    correlationId: string;
    timestamp: number;
}
export declare enum PurchaseStatus {
    SUCCESS = 200,
    PARTIAL_SUCCESS = 202,
    BAD_REQUEST = 400,
    UNAUTHORIZED = 401,
    NOT_FOUND = 404,
    INSUFFICIENT_FUNDS = 402,
    PROVIDER_ERROR = 502,
    TIMEOUT = 504,
    INTERNAL_ERROR = 500
}
export interface ProviderProductDto {
    id: string;
    name: string;
    description?: string;
    redeemInstruction?: string;
    providerId: string;
    providerName: string;
    currency: string;
    status: string;
    validity: string;
    country: string;
    usdFee: number;
    discountPer: number;
    usdRate: number;
    denominations: {
        increment: number;
        min: number;
        max: number;
        usdPrice: number;
    }[];
}
export declare enum OrderState {
    PENDING = 1,
    VERIFIED = 2,
    INVOICED = 3,
    PAID = 4,
    PROCESSING = 5,
    PARTIALLY_COMPLETED = 6,
    COMPLETED = 7,
    FAILED = 8,
    CANCELLED = 9,
    EXPIRED = 10
}
export declare enum userState {
    registered = "registered",
    approved = "approved",
    suspended = "suspended"
}
export declare enum UserSource {
    ewano = "ewano",
    gf = "giftscore"
}
export interface UserDto {
    id: string;
    userid: string;
    firstName?: string;
    lastName?: string;
    email: string;
    phone: string;
    username?: string;
    status: userState;
    source: UserSource;
    createdAt: Date;
    updatedAt: Date;
}
export interface ProgressionAuditLog {
    type: string;
    ts: number;
    data: string;
}
export interface OrderMetadata {
    id: number;
    currency: string;
    boughtPrice: number;
    costPrice: number;
    soldPrice: number;
    boughtDiscount: number;
    soldDiscount: number;
    boughtFee: number;
    costFinalPrice: number;
    soldFinalPrice: number;
    comission: number;
    exchangeRate: number;
    exchangeType: string;
}
export interface OrderItem {
    id: number;
    productId: number;
    productName: string;
    countryCode: string;
    currency: string;
    productImg: string;
    providerPID: string;
    amount: number;
    metadata: OrderMetadata;
}
export interface OrderLogDto {
    id: string;
    userId: string;
    state: string;
    coupon: {
        id: string;
        discount: number;
        code: string;
    } | null;
    ewanoOrder: {
        msisdn: string;
        id: string;
        discountAmount: number;
    } | null;
    payablePrice: number;
    totalComission: number;
    totalPrice: number;
    totalCost: number;
    boughtFinalPrice: number;
    totalDiscount: number;
    exchangeRate: number;
    exchangeType: string;
    auditLog: ProgressionAuditLog[];
    orderItems: OrderItem[];
    createdAt: Date;
    updatedAt: Date;
}
export declare enum EventType {
    BUY_ERROR = "BUY_ERROR",
    BUY_SUCCESS = "BUY_SUCCESS",
    REDEEM_ERROR = "REDEEM_ERROR",
    REDEEM_SUCCESS = "REDEEM_SUCCESS",
    BALANCE_ALERT = "BALANCE_ALERT",
    STATUS_CHANGE = "STATUS_CHANGE"
}
export interface ProviderLogDto {
    id: string;
    userId: string;
    status: ProviderStatus;
    providerName: string;
    eventType: EventType;
    message?: string;
    balance: number;
    orderId?: string;
    productId?: string;
    quantity?: number;
    amount?: number;
    redeem?: any;
    timestamp: Date;
}
export declare enum ProviderStatus {
    active = "ACTIVE",
    deactive = "DEACTIVE"
}
export interface ProviderDto {
    id: string;
    name: string;
    balance: number;
    panelUrl: string;
    timestamp: Date;
}
export interface PurchaseLogDto {
    id?: string;
    balanceInfo: {
        cost: number;
        currencyCode: string;
        currencyName: string;
        newBalance: number;
        oldBalance: number;
        updatedAt: Date;
    };
    product: {
        id: string;
        countryCode: string;
        currencyCode: string;
        productName: string;
        quantity: number;
        totalPrice: number;
        unitPrice: number;
    };
    currencyCode: string;
    orderId: string;
    userId: string;
    amount: number;
    amountPrice: number;
    exRate: number;
    discount: number;
    fee?: number;
    totalFee: number;
    preOrdered: boolean;
    recipientEmail: string;
    status: string;
    transactionCreatedTime: Date;
    transactionId: string;
    providerId?: string;
    providerName?: string;
    createDate: Date;
    redeem?: any;
}
export interface SagaStep {
    event: string;
    action: string;
    compensation?: string;
}
export interface MessagePattern<T> {
    message?: string;
    messageType: MessageType;
    tId?: string;
    data: T;
}
export interface RPCResponse<T> {
    code: number;
    message: string;
    data: T;
}
export declare enum AuditResultType {
    SUCCESSFUL = "SUCCESSFUL",
    FAILED = "FAILED"
}
export interface SecurityLogDto {
    title: string;
    eventResult: AuditResultType;
    userId: string;
    username: string;
    ipAddress: string;
    agent: string;
    isVisibleToUser: boolean;
    timestamp: number;
}
