package com.saas.tenant.service;

import com.saas.tenant.entity.Availability;
import com.saas.tenant.repository.AvailabilityRepository;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;
import java.util.List;

@Service
@Slf4j
@RequiredArgsConstructor
public class AvailabilityService {

    private final AvailabilityRepository availabilityRepository;

    @Transactional(transactionManager = "tenantTransactionManager")
    public Availability createAvailability(Availability availability) {
        log.info("Creating availability for doctor: {}", availability.getDoctorId());
        return availabilityRepository.save(availability);
    }

    @Transactional(transactionManager = "tenantTransactionManager", readOnly = true)
    public List<Availability> getDoctorAvailabilities(Long doctorId) {
        return availabilityRepository.findByDoctorId(doctorId);
    }

    @Transactional(transactionManager = "tenantTransactionManager", readOnly = true)
    public boolean isDoctorAvailable(Long doctorId, LocalDateTime dateTime) {
        // Check if there is any "Out of Service" availability blocking this time
        List<Availability> blocking = availabilityRepository.findOverlappingAvailabilities(
                doctorId, dateTime, dateTime.plusMinutes(1)); // Check specific point in time

        return blocking.isEmpty();
    }

    @Transactional(transactionManager = "tenantTransactionManager")
    public void deleteAvailability(Long id) {
        availabilityRepository.deleteById(id);
    }
}
