import { UserRole } from '@prisma/client';
import { PrismaService } from '../../database/prisma.service';
import { CreateReviewDto } from './dto/create-review.dto';
import { CreatePublicReviewDto } from './dto/create-public-review.dto';
type RequestUser = {
    id: string;
    role: UserRole;
    shopId: string | null;
};
export declare class ReviewsService {
    private readonly prisma;
    constructor(prisma: PrismaService);
    private normalizeCategory;
    private getPublicShop;
    private assertCanAccessShop;
    list(user: RequestUser, shopIdQuery?: string): Promise<{
        id: string;
        shopId: string;
        createdAt: Date;
        source: import("@prisma/client").$Enums.ReviewSource;
        customerPhone: string | null;
        rating: number;
        customerUserId: string | null;
        category: string | null;
        customerName: string;
        comment: string;
        googleStatus: import("@prisma/client").$Enums.ReviewGoogleStatus;
        googleExternalId: string | null;
        googlePostDate: Date | null;
        cashiStatus: import("@prisma/client").$Enums.ReviewCashiStatus;
        cashiPostDate: Date | null;
        response: string | null;
    }[]>;
    listPaged(user: RequestUser, args: {
        page: number;
        limit: number;
        q?: string;
        rating?: string;
        googleStatus?: string;
        cashiStatus?: string;
        source?: string;
        category?: string;
        from?: string;
        to?: string;
        shopId?: string;
    }): Promise<{
        page: number;
        limit: number;
        total: number;
        items: {
            id: string;
            shopId: string;
            createdAt: Date;
            source: import("@prisma/client").$Enums.ReviewSource;
            customerPhone: string | null;
            rating: number;
            customerUserId: string | null;
            category: string | null;
            customerName: string;
            comment: string;
            googleStatus: import("@prisma/client").$Enums.ReviewGoogleStatus;
            googleExternalId: string | null;
            googlePostDate: Date | null;
            cashiStatus: import("@prisma/client").$Enums.ReviewCashiStatus;
            cashiPostDate: Date | null;
            response: string | null;
        }[];
    }>;
    create(user: RequestUser, dto: CreateReviewDto): Promise<{
        id: string;
        shopId: string;
        createdAt: Date;
        source: import("@prisma/client").$Enums.ReviewSource;
        customerPhone: string | null;
        rating: number;
        customerUserId: string | null;
        category: string | null;
        customerName: string;
        comment: string;
        googleStatus: import("@prisma/client").$Enums.ReviewGoogleStatus;
        googleExternalId: string | null;
        googlePostDate: Date | null;
        cashiStatus: import("@prisma/client").$Enums.ReviewCashiStatus;
        cashiPostDate: Date | null;
        response: string | null;
    }>;
    getPublicContext(shopId: string, categoryRaw: string): Promise<{
        shopId: string;
        category: string;
        shop: {
            id: string;
            name: string;
            city: string;
            state: string;
            imageUrl: string | null;
        };
    }>;
    createPublic(dto: CreatePublicReviewDto): Promise<{
        id: string;
        shopId: string;
        createdAt: Date;
        source: import("@prisma/client").$Enums.ReviewSource;
        customerPhone: string | null;
        rating: number;
        customerUserId: string | null;
        category: string | null;
        customerName: string;
        comment: string;
        googleStatus: import("@prisma/client").$Enums.ReviewGoogleStatus;
        googleExternalId: string | null;
        googlePostDate: Date | null;
        cashiStatus: import("@prisma/client").$Enums.ReviewCashiStatus;
        cashiPostDate: Date | null;
        response: string | null;
    }>;
    respond(user: RequestUser, reviewId: string, response: string): Promise<{
        id: string;
        updatedAt: Date;
        response: string | null;
    }>;
    delete(user: RequestUser, reviewId: string): Promise<{
        deleted: boolean;
    }>;
    private assertGoogleConfigured;
    postToGoogle(user: RequestUser, reviewId: string): Promise<{
        posted: boolean;
        review?: undefined;
    } | {
        posted: boolean;
        review: {
            id: string;
            googleStatus: import("@prisma/client").$Enums.ReviewGoogleStatus;
            googlePostDate: Date | null;
        };
    }>;
    removeFromGoogle(user: RequestUser, reviewId: string): Promise<{
        removed: boolean;
        review: {
            id: string;
            googleStatus: import("@prisma/client").$Enums.ReviewGoogleStatus;
        };
    }>;
    postToCashi(user: RequestUser, reviewId: string): Promise<{
        posted: boolean;
        review?: undefined;
    } | {
        posted: boolean;
        review: {
            id: string;
            cashiStatus: import("@prisma/client").$Enums.ReviewCashiStatus;
            cashiPostDate: Date | null;
        };
    }>;
    removeFromCashi(user: RequestUser, reviewId: string): Promise<{
        removed: boolean;
        review: {
            id: string;
            cashiStatus: import("@prisma/client").$Enums.ReviewCashiStatus;
        };
    }>;
}
export {};
