import { UserRole } from '@prisma/client';
import { CreateCouponDto } from './dto/create-coupon.dto';
import { UpdateCouponDto } from './dto/update-coupon.dto';
import { CouponsService } from './coupons.service';
import { BulkCreateCouponDto } from './dto/bulk-create-coupon.dto';
import { RejectCouponDto } from './dto/reject-coupon.dto';
import { PublishCouponDto } from './dto/publish-coupon.dto';
type RequestWithUser = {
    user: {
        id: string;
        role: UserRole;
        shopId: string | null;
    };
};
export declare class CouponsController {
    private readonly coupons;
    constructor(coupons: CouponsService);
    list(req: RequestWithUser, shopId?: string): Promise<{
        id: string;
        shopId: string;
        createdAt: Date;
        updatedAt: Date;
        title: string;
        imageUrl: string | null;
        status: import("@prisma/client").$Enums.CouponStatus;
        rejectedAt: Date | null;
        rejectedReason: string | null;
        expiresAt: Date | null;
        shortDescription: string | null;
        longDescription: string | null;
        cashiCoinsCost: number;
        valueType: import("@prisma/client").$Enums.CouponValueType;
        valueFixed: number | null;
        valuePercent: number | null;
        minOrderValue: number | null;
        totalCoupons: number | null;
        distributionBid: number | null;
        moderationStatus: import("@prisma/client").$Enums.ModerationStatus;
        submittedAt: Date | null;
        publishedAt: Date | null;
        activeAt: Date | null;
        design: import("@prisma/client/runtime/library").JsonValue | null;
        resubmissionCount: number;
        issuedCount: number;
        redeemedCount: number;
    }[]>;
    listPaged(req: RequestWithUser, page?: string, limit?: string, q?: string, status?: string, moderationStatus?: string, shopId?: string): Promise<{
        page: number;
        limit: number;
        total: number;
        items: {
            id: string;
            shopId: string;
            createdAt: Date;
            updatedAt: Date;
            title: string;
            imageUrl: string | null;
            status: import("@prisma/client").$Enums.CouponStatus;
            rejectedAt: Date | null;
            rejectedReason: string | null;
            expiresAt: Date | null;
            shortDescription: string | null;
            longDescription: string | null;
            cashiCoinsCost: number;
            valueType: import("@prisma/client").$Enums.CouponValueType;
            valueFixed: number | null;
            valuePercent: number | null;
            minOrderValue: number | null;
            totalCoupons: number | null;
            distributionBid: number | null;
            moderationStatus: import("@prisma/client").$Enums.ModerationStatus;
            submittedAt: Date | null;
            publishedAt: Date | null;
            activeAt: Date | null;
            design: import("@prisma/client/runtime/library").JsonValue | null;
            resubmissionCount: number;
            issuedCount: number;
            redeemedCount: number;
        }[];
    }>;
    listAdmin(page?: string, limit?: string, q?: string, shopId?: string, status?: string, moderationStatus?: string): Promise<{
        page: number;
        limit: number;
        total: number;
        items: {
            id: string;
            shopId: string;
            createdAt: Date;
            updatedAt: Date;
            shop: {
                id: string;
                name: string;
                username: string | null;
                city: string;
                state: string;
            };
            title: string;
            imageUrl: string | null;
            status: import("@prisma/client").$Enums.CouponStatus;
            rejectedAt: Date | null;
            rejectedReason: string | null;
            expiresAt: Date | null;
            shortDescription: string | null;
            longDescription: string | null;
            cashiCoinsCost: number;
            valueType: import("@prisma/client").$Enums.CouponValueType;
            valueFixed: number | null;
            valuePercent: number | null;
            minOrderValue: number | null;
            totalCoupons: number | null;
            distributionBid: number | null;
            moderationStatus: import("@prisma/client").$Enums.ModerationStatus;
            publishedAt: Date | null;
            activeAt: Date | null;
            design: import("@prisma/client/runtime/library").JsonValue;
            resubmissionCount: number;
            issuedCount: number;
            redeemedCount: number;
        }[];
    }>;
    create(req: RequestWithUser, dto: CreateCouponDto): Promise<{
        id: string;
        shopId: string;
        createdAt: Date;
        updatedAt: Date;
        title: string;
        imageUrl: string | null;
        status: import("@prisma/client").$Enums.CouponStatus;
        rejectedAt: Date | null;
        rejectedReason: string | null;
        expiresAt: Date | null;
        shortDescription: string | null;
        longDescription: string | null;
        cashiCoinsCost: number;
        valueType: import("@prisma/client").$Enums.CouponValueType;
        valueFixed: number | null;
        valuePercent: number | null;
        minOrderValue: number | null;
        totalCoupons: number | null;
        distributionBid: number | null;
        moderationStatus: import("@prisma/client").$Enums.ModerationStatus;
        submittedAt: Date | null;
        publishedAt: Date | null;
        activeAt: Date | null;
        design: import("@prisma/client/runtime/library").JsonValue | null;
        resubmissionCount: number;
        issuedCount: number;
        redeemedCount: number;
    }>;
    bulkCreate(req: RequestWithUser, dto: BulkCreateCouponDto): Promise<any[]>;
    update(req: RequestWithUser, id: string, dto: UpdateCouponDto): Promise<{
        id: string;
        shopId: string;
        createdAt: Date;
        updatedAt: Date;
        title: string;
        imageUrl: string | null;
        status: import("@prisma/client").$Enums.CouponStatus;
        rejectedAt: Date | null;
        rejectedReason: string | null;
        expiresAt: Date | null;
        shortDescription: string | null;
        longDescription: string | null;
        cashiCoinsCost: number;
        valueType: import("@prisma/client").$Enums.CouponValueType;
        valueFixed: number | null;
        valuePercent: number | null;
        minOrderValue: number | null;
        totalCoupons: number | null;
        distributionBid: number | null;
        moderationStatus: import("@prisma/client").$Enums.ModerationStatus;
        submittedAt: Date | null;
        publishedAt: Date | null;
        activeAt: Date | null;
        design: import("@prisma/client/runtime/library").JsonValue | null;
        resubmissionCount: number;
        issuedCount: number;
        redeemedCount: number;
    }>;
    submit(req: RequestWithUser, id: string): Promise<{
        ok: boolean;
        coupon: {
            id: string;
            moderationStatus: import("@prisma/client").$Enums.ModerationStatus;
            submittedAt: Date | null;
            resubmissionCount: number;
        };
    }>;
    listCouponCustomers(req: RequestWithUser, id: string): Promise<{
        coupon: {
            id: string;
            shopId: string;
            title: string;
            moderationStatus: import("@prisma/client").$Enums.ModerationStatus;
            issuedCount: number;
            redeemedCount: number;
        };
        issued: {
            assignmentId: string;
            status: import("@prisma/client").$Enums.CustomerCouponStatus;
            assignedAt: Date;
            redeemedAt: Date | null;
            customer: {
                hasStoreSale: boolean;
                id: string;
                email: string | null;
                phone: string | null;
                role: import("@prisma/client").$Enums.UserRole;
                name: string | null;
            } | null;
            redeemedSale: {
                id: string;
                createdAt: Date;
                amount: number;
            } | null;
        }[];
        redeemed: {
            assignmentId: string;
            status: import("@prisma/client").$Enums.CustomerCouponStatus;
            assignedAt: Date;
            redeemedAt: Date | null;
            customer: {
                hasStoreSale: boolean;
                id: string;
                email: string | null;
                phone: string | null;
                role: import("@prisma/client").$Enums.UserRole;
                name: string | null;
            } | null;
            redeemedSale: {
                id: string;
                createdAt: Date;
                amount: number;
            } | null;
        }[];
    }>;
    publish(id: string, dto: PublishCouponDto): Promise<{
        ok: boolean;
        coupon: {
            id: string;
            status: import("@prisma/client").$Enums.CouponStatus;
            cashiCoinsCost: number;
            moderationStatus: import("@prisma/client").$Enums.ModerationStatus;
            publishedAt: Date | null;
        };
    }>;
    reject(id: string, dto: RejectCouponDto): Promise<{
        ok: boolean;
        coupon: {
            id: string;
            status: import("@prisma/client").$Enums.CouponStatus;
            rejectedAt: Date | null;
            rejectedReason: string | null;
            moderationStatus: import("@prisma/client").$Enums.ModerationStatus;
        };
    }>;
    remove(req: RequestWithUser, id: string): Promise<{
        ok: boolean;
    }>;
}
export {};
