package com.mortals.xhx.module.bussinesscard.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.mortals.framework.util.DataUtil;
import com.mortals.framework.util.StringUtils;
import com.mortals.xhx.module.company.model.CompanyEntity;
import com.mortals.xhx.module.company.service.CompanyService;
import com.mortals.xhx.module.favorites.model.FavoritesBusinesscardEntity;
import com.mortals.xhx.module.favorites.model.FavoritesBusinesscardQuery;
import com.mortals.xhx.module.favorites.service.FavoritesBusinesscardService;
import com.mortals.xhx.module.position.model.PositionEntity;
import com.mortals.xhx.module.position.service.PositionService;
import com.mortals.xhx.module.staff.model.StaffEntity;
import com.mortals.xhx.module.staff.service.StaffService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context;
import com.mortals.xhx.module.bussinesscard.dao.BussinesscardDao;
import com.mortals.xhx.module.bussinesscard.model.BussinesscardEntity;
import com.mortals.xhx.module.bussinesscard.service.BussinesscardService;
import lombok.extern.slf4j.Slf4j;
/**
* BussinesscardService
* 名片基本信息 service实现
*
* @author zxfei
* @date 2023-10-10
*/
@Service("bussinesscardService")
@Slf4j
public class BussinesscardServiceImpl extends AbstractCRUDServiceImpl<BussinesscardDao, BussinesscardEntity, Long> implements BussinesscardService {

    @Autowired
    private CompanyService companyService;
    @Autowired
    private PositionService positionService;
    @Autowired
    private FavoritesBusinesscardService favoritesBusinesscardService;
    @Autowired
    private StaffService staffService;

    @Override
    protected void saveBefore(BussinesscardEntity entity, Context context) throws AppException {
        super.saveBefore(entity, context);
        checkBussinesscard(entity, context);
    }

    @Override
    protected void updateBefore(BussinesscardEntity entity, Context context) throws AppException {
        super.saveBefore(entity, context);
        checkBussinesscard(entity, context);
    }

    private void checkBussinesscard(BussinesscardEntity entity, Context context)throws AppException {
        if(entity.getCompanyId()!=null){
            CompanyEntity companyEntity = companyService.get(entity.getCompanyId());
            if(companyEntity!=null){
                entity.setCompanyAdress(companyEntity.getBusinessAdress());
                entity.setCompanyName(companyEntity.getCompanyName());
            }
        }
        if(StringUtils.isEmpty(entity.getSetting())){
            JSONObject setting = new JSONObject();
            setting.put("photoPath",true);
            setting.put("companyName",true);
            setting.put("positionName",true);
            setting.put("phoneNumber",true);
            setting.put("email",true);
            setting.put("companyAdress",true);
            setting.put("companyIntro",true);
            setting.put("companyProduct",true);
            entity.setSetting(setting.toJSONString());
        }
        if(entity.getPositionId()!=null){
            PositionEntity positionEntity = positionService.get(entity.getPositionId());
            if(positionEntity!=null){
                entity.setPositionName(positionEntity.getPositionName());
            }
        }
        StaffEntity staffEntity = staffService.getCache(String.valueOf(entity.getStaffId()));
        if(staffEntity!=null){
            entity.setStaffName(staffEntity.getName());
            entity.setStaffStatus(staffEntity.getStaffStatus());
        }
    }

    @Override
    public BussinesscardEntity get(Long key, Context context) throws AppException {
        BussinesscardEntity entity = this.dao.get(key);

        if(entity!=null){
            StaffEntity staffEntity = staffService.getCache(String.valueOf(entity.getStaffId()));
            if(staffEntity!=null){
                entity.setStaffName(staffEntity.getName());
                entity.setStaffStatus(staffEntity.getStaffStatus());
            }
            if(context!=null && context.getUser()!=null) {
                FavoritesBusinesscardEntity favoritesBusinesscardEntity = favoritesBusinesscardService.selectOne(new FavoritesBusinesscardQuery().bussinesscardId(entity.getId()).userId(context.getUser().getId()));
                if(favoritesBusinesscardEntity!=null){
                    entity.setFavoriteStatus(1);
                }else {
                    entity.setFavoriteStatus(0);
                }
            }else {
                entity.setFavoriteStatus(0);
            }
        }
        return entity;
    }
}