import { UserRole } from '@prisma/client';
import { PrismaService } from '../../database/prisma.service';
import { RegisterSaleDto } from './dto/register-sale.dto';
import { MailService } from '../mail/mail.service';
type RequestUser = {
    id: string;
    role: UserRole;
    shopId: string | null;
};
export declare class SalesService {
    private readonly prisma;
    private readonly mail;
    private readonly logger;
    constructor(prisma: PrismaService, mail: MailService);
    private queueCouponUnlockedEmail;
    private defaultLoyaltySettings;
    private calculatePointsEarned;
    private normalizeSaleForResponse;
    private mapSaleForResponse;
    private assertCanAccessShop;
    list(user: RequestUser, shopIdQuery?: string): Promise<any[]>;
    listPaged(user: RequestUser, args: {
        page: number;
        limit: number;
        q?: string;
        customerId?: string;
        status?: string;
        from?: string;
        to?: string;
        minAmount?: string;
        maxAmount?: string;
        shopId?: string;
    }): Promise<{
        page: number;
        limit: number;
        total: number;
        items: any[];
    }>;
    register(user: RequestUser, dto: RegisterSaleDto): Promise<{
        customer: any;
        availableCoupons: {
            id: string;
            shopId: string;
            title: string;
            imageUrl: string | null;
            expiresAt: Date | null;
            valueType: import("@prisma/client").$Enums.CouponValueType;
            valueFixed: number | null;
            valuePercent: number | null;
            minOrderValue: number | null;
        }[];
        cashiCoins: {
            earned: any;
        };
        cashiPoints: {
            available: number;
            redeemed: number;
            earned: any;
        };
        distributedCoupons: {
            couponId: string;
            shopId: string;
            couponTitle: string;
            shopName: string;
        }[];
        id: string;
        shopId: string;
        createdAt: Date;
        amount: number;
        status: import("@prisma/client").$Enums.SaleStatus;
        originalAmount: number | null;
        discountAmount: number;
        appliedCouponId: string | null;
        loyaltyPointsRedeemed: number;
        loyaltyPointsEarned: number;
        cashiCoinsEarned: number;
        notes: string | null;
    }>;
}
export {};
