import { Querier } from '@platform-modules/db';
import * as drizzle_orm_pg_core from 'drizzle-orm/pg-core';
import { R as ReviewStatus, a as RatingAggregate, P as Page, b as Review, V as VerifiedPurchasePort, M as ModerationAdapter } from './types-BX_a9iqp.js';
export { c as REVIEW_LIST_DEFAULT_LIMIT, d as REVIEW_LIST_MAX_LIMIT, e as ReviewRating } from './types-BX_a9iqp.js';

declare const review: drizzle_orm_pg_core.PgTableWithColumns<{
    name: "review";
    schema: undefined;
    columns: {
        id: drizzle_orm_pg_core.PgColumn<{
            name: "id";
            tableName: "review";
            dataType: "string";
            columnType: "PgUUID";
            data: string;
            driverParam: string;
            notNull: true;
            hasDefault: true;
            isPrimaryKey: true;
            isAutoincrement: false;
            hasRuntimeDefault: false;
            enumValues: undefined;
            baseColumn: never;
            identity: undefined;
            generated: undefined;
        }, {}, {}>;
        productId: drizzle_orm_pg_core.PgColumn<{
            name: "product_id";
            tableName: "review";
            dataType: "string";
            columnType: "PgText";
            data: string;
            driverParam: string;
            notNull: true;
            hasDefault: false;
            isPrimaryKey: false;
            isAutoincrement: false;
            hasRuntimeDefault: false;
            enumValues: [string, ...string[]];
            baseColumn: never;
            identity: undefined;
            generated: undefined;
        }, {}, {}>;
        userId: drizzle_orm_pg_core.PgColumn<{
            name: "user_id";
            tableName: "review";
            dataType: "string";
            columnType: "PgText";
            data: string;
            driverParam: string;
            notNull: true;
            hasDefault: false;
            isPrimaryKey: false;
            isAutoincrement: false;
            hasRuntimeDefault: false;
            enumValues: [string, ...string[]];
            baseColumn: never;
            identity: undefined;
            generated: undefined;
        }, {}, {}>;
        purchaseId: drizzle_orm_pg_core.PgColumn<{
            name: "purchase_id";
            tableName: "review";
            dataType: "string";
            columnType: "PgText";
            data: string;
            driverParam: string;
            notNull: true;
            hasDefault: false;
            isPrimaryKey: false;
            isAutoincrement: false;
            hasRuntimeDefault: false;
            enumValues: [string, ...string[]];
            baseColumn: never;
            identity: undefined;
            generated: undefined;
        }, {}, {}>;
        vendorId: drizzle_orm_pg_core.PgColumn<{
            name: "vendor_id";
            tableName: "review";
            dataType: "string";
            columnType: "PgText";
            data: string;
            driverParam: string;
            notNull: false;
            hasDefault: false;
            isPrimaryKey: false;
            isAutoincrement: false;
            hasRuntimeDefault: false;
            enumValues: [string, ...string[]];
            baseColumn: never;
            identity: undefined;
            generated: undefined;
        }, {}, {}>;
        rating: drizzle_orm_pg_core.PgColumn<{
            name: "rating";
            tableName: "review";
            dataType: "number";
            columnType: "PgInteger";
            data: number;
            driverParam: string | number;
            notNull: true;
            hasDefault: false;
            isPrimaryKey: false;
            isAutoincrement: false;
            hasRuntimeDefault: false;
            enumValues: undefined;
            baseColumn: never;
            identity: undefined;
            generated: undefined;
        }, {}, {}>;
        body: drizzle_orm_pg_core.PgColumn<{
            name: "body";
            tableName: "review";
            dataType: "string";
            columnType: "PgText";
            data: string;
            driverParam: string;
            notNull: false;
            hasDefault: false;
            isPrimaryKey: false;
            isAutoincrement: false;
            hasRuntimeDefault: false;
            enumValues: [string, ...string[]];
            baseColumn: never;
            identity: undefined;
            generated: undefined;
        }, {}, {}>;
        status: drizzle_orm_pg_core.PgColumn<{
            name: "status";
            tableName: "review";
            dataType: "string";
            columnType: "PgText";
            data: ReviewStatus;
            driverParam: string;
            notNull: true;
            hasDefault: true;
            isPrimaryKey: false;
            isAutoincrement: false;
            hasRuntimeDefault: false;
            enumValues: [string, ...string[]];
            baseColumn: never;
            identity: undefined;
            generated: undefined;
        }, {}, {
            $type: ReviewStatus;
        }>;
        vendorReply: drizzle_orm_pg_core.PgColumn<{
            name: "vendor_reply";
            tableName: "review";
            dataType: "string";
            columnType: "PgText";
            data: string;
            driverParam: string;
            notNull: false;
            hasDefault: false;
            isPrimaryKey: false;
            isAutoincrement: false;
            hasRuntimeDefault: false;
            enumValues: [string, ...string[]];
            baseColumn: never;
            identity: undefined;
            generated: undefined;
        }, {}, {}>;
        createdAt: drizzle_orm_pg_core.PgColumn<{
            name: "created_at";
            tableName: "review";
            dataType: "date";
            columnType: "PgTimestamp";
            data: Date;
            driverParam: string;
            notNull: true;
            hasDefault: true;
            isPrimaryKey: false;
            isAutoincrement: false;
            hasRuntimeDefault: false;
            enumValues: undefined;
            baseColumn: never;
            identity: undefined;
            generated: undefined;
        }, {}, {}>;
        updatedAt: drizzle_orm_pg_core.PgColumn<{
            name: "updated_at";
            tableName: "review";
            dataType: "date";
            columnType: "PgTimestamp";
            data: Date;
            driverParam: string;
            notNull: true;
            hasDefault: true;
            isPrimaryKey: false;
            isAutoincrement: false;
            hasRuntimeDefault: false;
            enumValues: undefined;
            baseColumn: never;
            identity: undefined;
            generated: undefined;
        }, {}, {}>;
    };
    dialect: "pg";
}>;
declare const reviewsSchema: {
    review: drizzle_orm_pg_core.PgTableWithColumns<{
        name: "review";
        schema: undefined;
        columns: {
            id: drizzle_orm_pg_core.PgColumn<{
                name: "id";
                tableName: "review";
                dataType: "string";
                columnType: "PgUUID";
                data: string;
                driverParam: string;
                notNull: true;
                hasDefault: true;
                isPrimaryKey: true;
                isAutoincrement: false;
                hasRuntimeDefault: false;
                enumValues: undefined;
                baseColumn: never;
                identity: undefined;
                generated: undefined;
            }, {}, {}>;
            productId: drizzle_orm_pg_core.PgColumn<{
                name: "product_id";
                tableName: "review";
                dataType: "string";
                columnType: "PgText";
                data: string;
                driverParam: string;
                notNull: true;
                hasDefault: false;
                isPrimaryKey: false;
                isAutoincrement: false;
                hasRuntimeDefault: false;
                enumValues: [string, ...string[]];
                baseColumn: never;
                identity: undefined;
                generated: undefined;
            }, {}, {}>;
            userId: drizzle_orm_pg_core.PgColumn<{
                name: "user_id";
                tableName: "review";
                dataType: "string";
                columnType: "PgText";
                data: string;
                driverParam: string;
                notNull: true;
                hasDefault: false;
                isPrimaryKey: false;
                isAutoincrement: false;
                hasRuntimeDefault: false;
                enumValues: [string, ...string[]];
                baseColumn: never;
                identity: undefined;
                generated: undefined;
            }, {}, {}>;
            purchaseId: drizzle_orm_pg_core.PgColumn<{
                name: "purchase_id";
                tableName: "review";
                dataType: "string";
                columnType: "PgText";
                data: string;
                driverParam: string;
                notNull: true;
                hasDefault: false;
                isPrimaryKey: false;
                isAutoincrement: false;
                hasRuntimeDefault: false;
                enumValues: [string, ...string[]];
                baseColumn: never;
                identity: undefined;
                generated: undefined;
            }, {}, {}>;
            vendorId: drizzle_orm_pg_core.PgColumn<{
                name: "vendor_id";
                tableName: "review";
                dataType: "string";
                columnType: "PgText";
                data: string;
                driverParam: string;
                notNull: false;
                hasDefault: false;
                isPrimaryKey: false;
                isAutoincrement: false;
                hasRuntimeDefault: false;
                enumValues: [string, ...string[]];
                baseColumn: never;
                identity: undefined;
                generated: undefined;
            }, {}, {}>;
            rating: drizzle_orm_pg_core.PgColumn<{
                name: "rating";
                tableName: "review";
                dataType: "number";
                columnType: "PgInteger";
                data: number;
                driverParam: string | number;
                notNull: true;
                hasDefault: false;
                isPrimaryKey: false;
                isAutoincrement: false;
                hasRuntimeDefault: false;
                enumValues: undefined;
                baseColumn: never;
                identity: undefined;
                generated: undefined;
            }, {}, {}>;
            body: drizzle_orm_pg_core.PgColumn<{
                name: "body";
                tableName: "review";
                dataType: "string";
                columnType: "PgText";
                data: string;
                driverParam: string;
                notNull: false;
                hasDefault: false;
                isPrimaryKey: false;
                isAutoincrement: false;
                hasRuntimeDefault: false;
                enumValues: [string, ...string[]];
                baseColumn: never;
                identity: undefined;
                generated: undefined;
            }, {}, {}>;
            status: drizzle_orm_pg_core.PgColumn<{
                name: "status";
                tableName: "review";
                dataType: "string";
                columnType: "PgText";
                data: ReviewStatus;
                driverParam: string;
                notNull: true;
                hasDefault: true;
                isPrimaryKey: false;
                isAutoincrement: false;
                hasRuntimeDefault: false;
                enumValues: [string, ...string[]];
                baseColumn: never;
                identity: undefined;
                generated: undefined;
            }, {}, {
                $type: ReviewStatus;
            }>;
            vendorReply: drizzle_orm_pg_core.PgColumn<{
                name: "vendor_reply";
                tableName: "review";
                dataType: "string";
                columnType: "PgText";
                data: string;
                driverParam: string;
                notNull: false;
                hasDefault: false;
                isPrimaryKey: false;
                isAutoincrement: false;
                hasRuntimeDefault: false;
                enumValues: [string, ...string[]];
                baseColumn: never;
                identity: undefined;
                generated: undefined;
            }, {}, {}>;
            createdAt: drizzle_orm_pg_core.PgColumn<{
                name: "created_at";
                tableName: "review";
                dataType: "date";
                columnType: "PgTimestamp";
                data: Date;
                driverParam: string;
                notNull: true;
                hasDefault: true;
                isPrimaryKey: false;
                isAutoincrement: false;
                hasRuntimeDefault: false;
                enumValues: undefined;
                baseColumn: never;
                identity: undefined;
                generated: undefined;
            }, {}, {}>;
            updatedAt: drizzle_orm_pg_core.PgColumn<{
                name: "updated_at";
                tableName: "review";
                dataType: "date";
                columnType: "PgTimestamp";
                data: Date;
                driverParam: string;
                notNull: true;
                hasDefault: true;
                isPrimaryKey: false;
                isAutoincrement: false;
                hasRuntimeDefault: false;
                enumValues: undefined;
                baseColumn: never;
                identity: undefined;
                generated: undefined;
            }, {}, {}>;
        };
        dialect: "pg";
    }>;
};
type ReviewsSchema = typeof reviewsSchema;

declare function getRatingAggregate(q: Querier<ReviewsSchema>, productId: string): Promise<RatingAggregate>;

interface ListReviewsOptions {
    audience: 'public' | 'admin';
    vendorId?: string;
    cursor?: string;
    limit?: number;
}
declare function listReviews(q: Querier<ReviewsSchema>, productId: string, opts: ListReviewsOptions): Promise<Page<Review>>;
interface ListReviewsByVendorOptions {
    audience: 'public' | 'admin';
    productId?: string;
    cursor?: string;
    limit?: number;
}
declare function listReviewsByVendor(q: Querier<ReviewsSchema>, vendorId: string, opts: ListReviewsByVendorOptions): Promise<Page<Review>>;

declare function moderateReview(q: Querier<ReviewsSchema>, reviewId: string, action: 'approve' | 'reject'): Promise<void>;

declare function replyToReview(q: Querier<ReviewsSchema>, reviewId: string, vendorId: string, reply: string): Promise<void>;

declare class NotPurchasedError extends Error {
    readonly userId: string;
    readonly productId: string;
    readonly name = "NotPurchasedError";
    readonly code: "NOT_PURCHASED";
    readonly httpStatus: 403;
    constructor(userId: string, productId: string);
}
declare class ReviewNotFoundError extends Error {
    readonly reviewId: string;
    readonly name = "ReviewNotFoundError";
    readonly code: "REVIEW_NOT_FOUND";
    readonly httpStatus: 404;
    constructor(reviewId: string);
}
declare class ReviewValidationError extends Error {
    readonly field: string;
    readonly name = "ReviewValidationError";
    readonly code: "REVIEW_VALIDATION";
    readonly httpStatus: 400;
    constructor(field: string);
}
type ImmutableField = 'userId' | 'productId' | 'purchaseId' | 'vendorId';
declare class ImmutableFieldError extends Error {
    readonly field: ImmutableField;
    readonly name = "ImmutableFieldError";
    readonly code: "IMMUTABLE_FIELD";
    constructor(field: ImmutableField);
}
declare class ReviewsConfigError extends Error {
    readonly detail: string;
    readonly name = "ReviewsConfigError";
    readonly code: "REVIEWS_CONFIG";
    constructor(detail: string);
}
declare class ReviewsMigrateError extends Error {
    readonly detail: string;
    readonly name = "ReviewsMigrateError";
    readonly code: "REVIEWS_MIGRATE";
    constructor(detail: string);
}
declare function isNotPurchasedError(e: unknown): e is NotPurchasedError;
declare function isReviewNotFoundError(e: unknown): e is ReviewNotFoundError;
declare function isReviewValidationError(e: unknown): e is ReviewValidationError;
declare function isImmutableFieldError(e: unknown): e is ImmutableFieldError;
declare function isReviewsConfigError(e: unknown): e is ReviewsConfigError;
declare function isReviewsMigrateError(e: unknown): e is ReviewsMigrateError;

declare function pushReviewsSchema(db: Querier<ReviewsSchema>): Promise<void>;

interface SubmitReviewInput {
    productId: string;
    userId: string;
    vendorId: string | null;
    rating: number;
    body?: string | null;
    purchaseId: string;
}
interface SubmitReviewOptions {
    verifiedPurchase: VerifiedPurchasePort;
    moderation?: ModerationAdapter;
}
declare function submitReview(q: Querier<ReviewsSchema>, input: SubmitReviewInput, opts: SubmitReviewOptions): Promise<Review>;

export { type ImmutableField, ImmutableFieldError, type ListReviewsByVendorOptions, type ListReviewsOptions, ModerationAdapter, NotPurchasedError, Page, RatingAggregate, Review, ReviewNotFoundError, ReviewStatus, ReviewValidationError, ReviewsConfigError, ReviewsMigrateError, type ReviewsSchema, type SubmitReviewInput, type SubmitReviewOptions, VerifiedPurchasePort, getRatingAggregate, isImmutableFieldError, isNotPurchasedError, isReviewNotFoundError, isReviewValidationError, isReviewsConfigError, isReviewsMigrateError, listReviews, listReviewsByVendor, moderateReview, pushReviewsSchema, replyToReview, review, reviewsSchema, submitReview };
