package org.example.service;

import org.example.entity.HospitalRoom;
import org.example.mapper.HospitalRoomMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class HospitalRoomService {
    
    @Autowired
    private HospitalRoomMapper hospitalRoomMapper;
    
    /**
     * 获取所有病房列表
     * @return 病房列表
     */
    public List<HospitalRoom> findAll() {
        return hospitalRoomMapper.findAll();
    }
    
    /**
     * 根据条件查询病房
     * @param code 病房代码
     * @param department 所属科室
     * @param ward 所属病区
     * @param enabled 是否启用
     * @return 病房列表
     */
    public List<HospitalRoom> findByConditions(String code, String department, String ward, Boolean enabled) {
        return hospitalRoomMapper.findByConditions(code, department, ward, enabled);
    }
    
    /**
     * 根据病房代码获取病房信息
     * @param code 病房代码
     * @return 病房信息
     */
    public HospitalRoom findByCode(String code) {
        return hospitalRoomMapper.findByCode(code);
    }
    
    /**
     * 检查指定病区下是否存在相同的病房代码
     * @param code 病房代码
     * @param belongWard 所属病区
     * @return 是否存在
     */
    public boolean existsByCodeAndWard(String code, String belongWard) {
        return hospitalRoomMapper.countByCodeAndWard(code, belongWard) > 0;
    }
    
    /**
     * 检查指定病区下是否存在相同的病房代码（排除自身）
     * @param code 病房代码
     * @param belongWard 所属病区
     * @param excludeCode 要排除的病房代码
     * @return 是否存在
     */
    public boolean existsByCodeAndWardExcluding(String code, String belongWard, String excludeCode) {
        return hospitalRoomMapper.countByCodeAndWardExcluding(code, belongWard, excludeCode) > 0;
    }
    
    /**
     * 添加新病房
     * @param room 病房信息
     */
    public void addRoom(HospitalRoom room) {
        hospitalRoomMapper.insert(room);
    }
    
    /**
     * 更新病房信息
     * @param originCode 原始病房代码
     * @param room 病房信息
     */
    public void updateRoom(String originCode, HospitalRoom room) {
        hospitalRoomMapper.update(room, originCode);
    }
    
    /**
     * 删除病房
     * @param code 病房代码
     */
    public void deleteRoom(String code) {
        hospitalRoomMapper.deleteByCode(code);
    }
}