import { PrismaService } from "../../core/database/prisma/prisma.service";
import { CreateFeedbackDto, UpdateFeedbackDto, UpdateStatusDto, BatchUpdateStatusDto, FeedbackQueryDto, AdminFeedbackQueryDto, FeedbackStatsQueryDto, BatchUpdateResultDto } from './dto/feedback.dto';
export declare class FeedbackService {
    private readonly prisma;
    private readonly logger;
    constructor(prisma: PrismaService);
    create(userId: string, dto: CreateFeedbackDto): Promise<{
        id: any;
        type: any;
        title: any;
        content: any;
        attachments: any;
        status: any;
        priority: any;
        adminReply: any;
        createdAt: any;
        updatedAt: any;
    }>;
    findMyFeedbacks(userId: string, query: FeedbackQueryDto): Promise<{
        items: {
            id: any;
            type: any;
            title: any;
            content: any;
            attachments: any;
            status: any;
            priority: any;
            adminReply: any;
            createdAt: any;
            updatedAt: any;
        }[];
        total: number;
        page: number;
        limit: number;
        totalPages: number;
        hasNext: boolean;
        hasPrev: boolean;
    }>;
    findMyFeedbackById(userId: string, feedbackId: string): Promise<{
        id: any;
        type: any;
        title: any;
        content: any;
        attachments: any;
        status: any;
        priority: any;
        adminReply: any;
        createdAt: any;
        updatedAt: any;
    }>;
    findAll(adminUserId: string, query: AdminFeedbackQueryDto): Promise<{
        items: {
            id: any;
            type: any;
            title: any;
            content: any;
            attachments: any;
            pageUrl: any;
            userAgent: any;
            status: any;
            priority: any;
            adminNote: any;
            adminReply: any;
            assignee: {
                id: any;
                displayName: any;
                email: any;
            } | null;
            resolvedAt: any;
            user: {
                id: any;
                displayName: any;
                email: any;
                department: any;
            };
            region: any;
            createdAt: any;
            updatedAt: any;
        }[];
        total: number;
        page: number;
        limit: number;
        totalPages: number;
        hasNext: boolean;
        hasPrev: boolean;
    }>;
    findById(adminUserId: string, feedbackId: string): Promise<{
        id: any;
        type: any;
        title: any;
        content: any;
        attachments: any;
        pageUrl: any;
        userAgent: any;
        status: any;
        priority: any;
        adminNote: any;
        adminReply: any;
        assignee: {
            id: any;
            displayName: any;
            email: any;
        } | null;
        resolvedAt: any;
        user: {
            id: any;
            displayName: any;
            email: any;
            department: any;
        };
        region: any;
        createdAt: any;
        updatedAt: any;
    }>;
    updateStatus(adminUserId: string, feedbackId: string, dto: UpdateStatusDto): Promise<{
        id: string;
        status: import("@prisma/client").$Enums.FeedbackStatus;
        updatedAt: Date;
    }>;
    update(adminUserId: string, feedbackId: string, dto: UpdateFeedbackDto): Promise<{
        id: string;
        priority: import("@prisma/client").$Enums.FeedbackPriority | null;
        adminNote: string | null;
        adminReply: string | null;
        assignee: {
            id: string;
            displayName: string;
        } | null;
        updatedAt: Date;
    }>;
    delete(adminUserId: string, feedbackId: string): Promise<null>;
    batchUpdateStatus(adminUserId: string, dto: BatchUpdateStatusDto): Promise<BatchUpdateResultDto>;
    getStats(adminUserId: string, query: FeedbackStatsQueryDto): Promise<{
        avgResolutionTime: number;
        todayNew: number;
        thisWeekNew: number;
        thisMonthNew: number;
        byRegion?: Record<string, number> | undefined;
        total: number;
        byStatus: Record<string, number>;
        byType: Record<string, number>;
        byPriority: {
            UNSET: number;
        };
    }>;
    private validateStatusTransition;
    private getAdminRegions;
    private getRegionFilter;
    private checkRegionAccess;
    private getUserFeedbackInclude;
    private getAdminFeedbackInclude;
    private formatUserFeedback;
    private formatAdminFeedback;
}
