import { DataSource } from 'typeorm';
import { Meeting } from '../entities/meeting.entity';
import { CreateMeetingDto } from '../dto/create-meeting.dto';
import { UpdateMeetingDto } from '../dto/update-meeting.dto';
import { ListMeetingsQueryDto } from '../dto/list-meetings.dto';
import { EndMeetingDto } from '../dto/end-meeting.dto';
import { RoomCodeGeneratorService } from './room-code-generator.service';
export interface AttendanceRow {
    userId: string | number | null;
    displayName: string;
    email?: string | null;
    role: string;
    channel?: string;
    joinedAt: number;
    leftAt: number;
}
export declare class MeetingService {
    private readonly dataSource;
    private readonly codeGenerator;
    private readonly logger;
    constructor(dataSource: DataSource, codeGenerator: RoomCodeGeneratorService);
    create(dto: CreateMeetingDto, currentUserId: number): Promise<Meeting>;
    createForAudit(auditRowId: number, currentUserId: number): Promise<Meeting>;
    findOne(id: number): Promise<Meeting>;
    findByRoomCode(roomCode: string): Promise<Meeting>;
    findAll(q: ListMeetingsQueryDto, currentUserId: number): Promise<{
        data: Meeting[];
        meta: {
            total: number;
            page: number;
            limit: number;
            totalPages: number;
        };
    }>;
    findByAudit(auditRowId: number): Promise<Meeting[]>;
    update(id: number, dto: UpdateMeetingDto, currentUserId: number): Promise<Meeting>;
    markLive(roomCode: string): Promise<void>;
    persistAttendance(roomCode: string, rows: AttendanceRow[]): Promise<void>;
    end(id: number, dto: EndMeetingDto, currentUserId: number): Promise<Meeting>;
    cancel(id: number, currentUserId: number): Promise<Meeting>;
    canJoin(userId: number, roomCode: string): Promise<boolean>;
    private assertCanManage;
    private userCanViewAll;
    private mapRole;
    private mapChannel;
}
