import { Prisma, UserRole } from '@prisma/client';
import { PrismaService } from '../../database/prisma.service';
import { CreateLuckyDrawDto } from './dto/create-lucky-draw.dto';
import { UpdateLuckyDrawDto } from './dto/update-lucky-draw.dto';
import { UploadsService } from '../uploads/uploads.service';
import type { RejectLuckyDrawDto } from './dto/reject-lucky-draw.dto';
type RequestUser = {
    id: string;
    role: UserRole;
    shopId: string | null;
};
export declare class LuckyDrawService {
    private readonly prisma;
    private readonly uploads;
    constructor(prisma: PrismaService, uploads: UploadsService);
    private generateLuckyDrawImageFromDesign;
    private assertCanAccessShop;
    private listAllowedShopIdsForUser;
    private createForShop;
    list(user: RequestUser, shopIdQuery?: string): Promise<{
        id: string;
        name: string;
        shopId: string;
        createdAt: Date;
        updatedAt: Date;
        description: string | null;
        imageUrl: string | null;
        status: import("@prisma/client").$Enums.LuckyDrawStatus;
        rejectedAt: Date | null;
        rejectedReason: string | null;
        moderationStatus: import("@prisma/client").$Enums.ModerationStatus;
        submittedAt: Date | null;
        publishedAt: Date | null;
        design: Prisma.JsonValue | null;
        prize: string | null;
        startDate: Date;
        endDate: Date;
        participantsCount: number;
    }[]>;
    listPaged(user: RequestUser, args: {
        page: number;
        limit: number;
        q?: string;
        status?: string;
        moderationStatus?: string;
        shopId?: string;
    }): Promise<{
        page: number;
        limit: number;
        total: number;
        items: {
            id: string;
            name: string;
            shopId: string;
            createdAt: Date;
            updatedAt: Date;
            description: string | null;
            imageUrl: string | null;
            status: import("@prisma/client").$Enums.LuckyDrawStatus;
            rejectedAt: Date | null;
            rejectedReason: string | null;
            moderationStatus: import("@prisma/client").$Enums.ModerationStatus;
            submittedAt: Date | null;
            publishedAt: Date | null;
            design: Prisma.JsonValue | null;
            prize: string | null;
            startDate: Date;
            endDate: Date;
            participantsCount: number;
        }[];
    }>;
    listAdminPaged(args: {
        page: number;
        limit: number;
        q?: string;
        shopId?: string;
        status?: string;
        moderationStatus?: string;
    }): Promise<{
        page: number;
        limit: number;
        total: number;
        items: {
            id: string;
            name: string;
            shopId: string;
            createdAt: Date;
            updatedAt: Date;
            shop: {
                id: string;
                name: string;
                username: string | null;
                city: string;
                state: string;
            };
            description: string | null;
            imageUrl: string | null;
            status: import("@prisma/client").$Enums.LuckyDrawStatus;
            rejectedAt: Date | null;
            rejectedReason: string | null;
            moderationStatus: import("@prisma/client").$Enums.ModerationStatus;
            publishedAt: Date | null;
            prize: string | null;
            startDate: Date;
            endDate: Date;
            participantsCount: number;
        }[];
    }>;
    publish(id: string): Promise<{
        ok: boolean;
        luckyDraw: {
            id: string;
            status: import("@prisma/client").$Enums.LuckyDrawStatus;
            moderationStatus: import("@prisma/client").$Enums.ModerationStatus;
            publishedAt: Date | null;
        };
    }>;
    reject(id: string, dto: RejectLuckyDrawDto): Promise<{
        ok: boolean;
        luckyDraw: {
            id: string;
            status: import("@prisma/client").$Enums.LuckyDrawStatus;
            rejectedAt: Date | null;
            rejectedReason: string | null;
            moderationStatus: import("@prisma/client").$Enums.ModerationStatus;
        };
    }>;
    submit(user: RequestUser, id: string): Promise<{
        ok: boolean;
        luckyDraw: {
            id: string;
            moderationStatus: import("@prisma/client").$Enums.ModerationStatus;
            submittedAt: Date | null;
        };
    }>;
    create(user: RequestUser, dto: CreateLuckyDrawDto): Promise<{
        id: string;
        name: string;
        shopId: string;
        createdAt: Date;
        updatedAt: Date;
        description: string | null;
        imageUrl: string | null;
        status: import("@prisma/client").$Enums.LuckyDrawStatus;
        rejectedAt: Date | null;
        rejectedReason: string | null;
        moderationStatus: import("@prisma/client").$Enums.ModerationStatus;
        submittedAt: Date | null;
        publishedAt: Date | null;
        design: Prisma.JsonValue | null;
        prize: string | null;
        startDate: Date;
        endDate: Date;
        participantsCount: number;
    }>;
    bulkCreate(user: RequestUser, dto: CreateLuckyDrawDto & {
        shopIds?: string[];
        allShops?: boolean;
    }): Promise<any[]>;
    update(user: RequestUser, id: string, dto: UpdateLuckyDrawDto): Promise<{
        id: string;
        name: string;
        shopId: string;
        createdAt: Date;
        updatedAt: Date;
        description: string | null;
        imageUrl: string | null;
        status: import("@prisma/client").$Enums.LuckyDrawStatus;
        rejectedAt: Date | null;
        rejectedReason: string | null;
        moderationStatus: import("@prisma/client").$Enums.ModerationStatus;
        submittedAt: Date | null;
        publishedAt: Date | null;
        design: Prisma.JsonValue | null;
        prize: string | null;
        startDate: Date;
        endDate: Date;
        participantsCount: number;
    }>;
    remove(user: RequestUser, id: string): Promise<{
        ok: boolean;
    }>;
}
export {};
