package com.hrs.service.impl;

import com.hrs.dao.CollectionDao;
import com.hrs.dao.HouseDao;
import com.hrs.dao.impl.CollectionDaoImpl;
import com.hrs.dao.impl.HouseDaoImpl;
import com.hrs.model.entity.Collection;
import com.hrs.model.entity.House;
import com.hrs.service.CollectionService;

import java.util.List;

/**   
* Copyright: Copyright (c) 2026 chinasofti
* 
* @ClassName: CollectionServiceImpl.java
* @Description: 收藏业务逻辑实现类
*
* @version: v1.0.0
* @author: 黄红
* @date: 2026年4月13日 上午10:04:16 
*
* Modification History:
* Date         Author          Version            Description
*---------------------------------------------------------*
* 2026年4月13日     黄红           v1.0.0               新建文件
*/
public class CollectionServiceImpl implements CollectionService {

    private CollectionDao collectionDao = new CollectionDaoImpl();
    private HouseDao houseDao = new HouseDaoImpl();

    /**
     * 添加收藏
     * @param tenantId 租客ID
     * @param houseId 房源ID
     * @return 添加结果
     */
    @Override
    public CollectionResult addCollection(Long tenantId, Long houseId) {
        CollectionResult result = new CollectionResult();

        // 1. 参数校验
        if (tenantId == null || tenantId <= 0) {
            result.setSuccess(false);
            result.setMessage("用户未登录");
            return result;
        }

        if (houseId == null || houseId <= 0) {
            result.setSuccess(false);
            result.setMessage("房源信息错误");
            return result;
        }

        // 2. 检查房源是否存在且已上架
        House house = houseDao.findById(houseId);
        if (house == null) {
            result.setSuccess(false);
            result.setMessage("房源不存在");
            return result;
        }

        if (!"1".equals(house.getStatus())) {
            result.setSuccess(false);
            result.setMessage("房源已下架，无法收藏");
            return result;
        }

        // 3. 检查是否已收藏
        if (collectionDao.isCollected(tenantId, houseId)) {
            result.setSuccess(false);
            result.setMessage("已经收藏过该房源");
            result.setExists(true);
            return result;
        }

        // 4. 添加收藏
        Collection collection = new Collection();
        collection.setTenantId(tenantId);
        collection.setHouseId(houseId);

        boolean success = collectionDao.add(collection);
        result.setSuccess(success);
        result.setMessage(success ? "收藏成功" : "收藏失败，请稍后重试");

        return result;
    }

    /**
     * 取消收藏（通过收藏ID）
     */
    @Override
    public boolean deleteCollectionById(Long collectionId, Long tenantId) {
        if (collectionId == null || tenantId == null) {
            return false;
        }

        // 验证该收藏是否属于当前用户（实际DAO层可以直接删除，但为了安全可以验证）
        return collectionDao.deleteById(collectionId);
    }

    /**
     * 取消收藏（通过房源ID）
     */
    @Override
    public boolean deleteCollectionByHouseId(Long houseId, Long tenantId) {
        if (houseId == null || tenantId == null) {
            return false;
        }

        return collectionDao.delete(tenantId, houseId);
    }

    /**
     * 获取租客的收藏列表（带房源详情）
     */
    @Override
    public List<Collection> getTenantCollections(Long tenantId) {
        if (tenantId == null || tenantId <= 0) {
            return null;
        }

        List<Collection> collections = collectionDao.findByTenantId(tenantId);

        // 过滤掉已下架的房源
        collections.removeIf(c -> {
            House house = c.getHouse();
            return house == null || !"1".equals(house.getStatus());
        });

        return collections;
    }

    /**
     * 检查是否已收藏
     */
    @Override
    public boolean isCollected(Long tenantId, Long houseId) {
        if (tenantId == null || houseId == null) {
            return false;
        }
        return collectionDao.isCollected(tenantId, houseId);
    }

    /**
     * 获取收藏数量
     */
    @Override
    public int getCollectionCount(Long tenantId) {
        if (tenantId == null || tenantId <= 0) {
            return 0;
        }
        return collectionDao.countByTenantId(tenantId);
    }
}
