import { Repository, DataSource } from 'typeorm';
import { Appointment } from './appointment.entity';
import { CreateAppointmentDto } from './dto/create-appointment.dto';
import { UpdateAppointmentDto } from './dto/update-appointment.dto';
import { ConfirmAppointmentDto } from './dto/confirm-appointment.dto';
import { AppointmentsGateway } from './appointments.gateway';
import { UserService } from '../user/user.service';
import { RefusedAppointment } from './refused-appointment.entity';
import { SettingsService } from '../config/settings.service';
import { ServiceOrderService } from '../service-order/service-order.service';
import { User } from '../auth/user.entity';
import { AdminCreateAppointmentDto } from './dto/admin-create-appointment.dto';
import { TechnicianCreateAppointmentDto } from './dto/technician-create-appointment.dto';
import { MoveAppointmentDto } from './dto/move-appointment.dto';
import { PointsService } from '../points/points.service';
import { TimezoneService } from '../common/services/timezone.service';
import { TimeSlotService } from '../common/services/time-slot.service';
import { WhatsAppNotificationService } from '../whatsapp/whatsapp-notification.service';
export declare class AppointmentService {
    private readonly appointmentRepository;
    private readonly appointmentsGateway;
    private readonly userService;
    private readonly refusedAppointmentRepository;
    private readonly settingsService;
    private readonly serviceOrderService;
    private readonly dataSource;
    private readonly pointsService;
    private readonly timezoneService;
    private readonly timeSlotService;
    private readonly whatsappNotificationService;
    constructor(appointmentRepository: Repository<Appointment>, appointmentsGateway: AppointmentsGateway, userService: UserService, refusedAppointmentRepository: Repository<RefusedAppointment>, settingsService: SettingsService, serviceOrderService: ServiceOrderService, dataSource: DataSource, pointsService: PointsService, timezoneService: TimezoneService, timeSlotService: TimeSlotService, whatsappNotificationService: WhatsAppNotificationService);
    getAllAppointments(): Promise<Appointment[]>;
    getAppointmentsById(id: number): Promise<any>;
    getAppointmentsByUserAndDate(clientId?: number, technicianId?: number, dateFrom?: Date, dateTo?: Date, status?: string, overview?: boolean, page?: number, limit?: number, tipoCierre?: string, equipmentTypeIds?: number[], jwtUser?: User): Promise<{
        data: Partial<Appointment>[];
        total: number;
        page: number;
        totalPages: number;
    }>;
    private isAppointmentInTechnicianAvailability;
    createAppointment(appointment: CreateAppointmentDto): Promise<Appointment>;
    confirmAppointmentWithSlotCheck(id: number, appointment: ConfirmAppointmentDto, ghostAccept?: boolean): Promise<Appointment>;
    updateAppointment(id: number, updateData: UpdateAppointmentDto): Promise<Appointment>;
    deleteAppointment(id: number, user?: any): Promise<void>;
    refuseAppointment(appointmentId: number, technicianId: number): Promise<RefusedAppointment>;
    countAppointmentsForClientSlot(clientId: number, date: string, time: string): Promise<number>;
    countAppointmentsForTechnicianSlot(technicianId: number, date: string, time: string): Promise<number>;
    private validateBasicTiming;
    private validateAppointmentTiming;
    createAppointmentWithSlotCheck(appointment: CreateAppointmentDto): Promise<Appointment>;
    private scheduleGhostAccept;
    createAdminAppointment(adminAppointmentData: AdminCreateAppointmentDto, adminUserId: number): Promise<Appointment>;
    createTechnicianSelfAppointment(technicianAppointmentData: TechnicianCreateAppointmentDto, technicianId: number): Promise<Appointment>;
    moveAppointment(appointmentId: number, moveData: MoveAppointmentDto, adminUserId: number): Promise<Appointment>;
    getCompatibleTechniciansForAppointment(appointmentId: number): Promise<{
        equipmentType: {
            id: number;
            description: string;
        };
        compatibleTechnicians: {
            id: number;
            name: string;
            email: string;
        }[];
        totalCount: number;
    }>;
    private getOccupiedHoursForSlot;
    private reorderAppointmentsInSlot;
    getAvailableTimeSlotsWithTechnicians(equipmentTypeId: number, startDate?: Date, clientId?: number): Promise<{
        date: string;
        time: string;
        availableTechnicians: number;
    }[]>;
    getEquipmentHistory(equipmentId: number, clientId?: number, technicianId?: number, page?: number, limit?: number, user?: User): Promise<{
        data: Partial<Appointment>[];
        total: number;
        page: number;
        totalPages: number;
    }>;
}
