package cn.pluss.platform.ryx;

import cn.pluss.platform.entity.RegionCodeRyx;
import cn.pluss.platform.exception.MsgException;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * <p>
 * 瑞银信进件，地区编码 服务类
 * </p>
 *
 * @author Djh
 * @since 2021-01-15
 */
public interface RegionCodeRyxService extends IService<RegionCodeRyx> {

    /**
     * 根据地区名称获取对应的地区编码信息
     * @param areaName 地区名称
     * @return 地区编码信息
     */
    default RegionCodeRyx get(String provinceName, String cityName, String areaName) {
        RegionCodeRyx regionCodeRyx = new RegionCodeRyx();
        regionCodeRyx.setArea(areaName);
        regionCodeRyx.setProvince(provinceName);
        regionCodeRyx.setCity(cityName);

        if ("潜江市".equals(cityName)) {
            regionCodeRyx.setCity("荆州市");
            regionCodeRyx.setArea("潜江市(省直辖)");
        } else if ("仙桃市".equals(cityName)) {
            regionCodeRyx.setCity("荆州市");
            regionCodeRyx.setArea("仙桃市(省直辖)");
        } else if ("天门市".equals(cityName)) {
            regionCodeRyx.setCity("荆州市");
            regionCodeRyx.setArea("天门市(省直辖)");
        }

        // 地区划分略有区别
        if ("海南省".equals(provinceName) && cityName.equals("儋州市")) {
            regionCodeRyx.setProvince("省直辖县级行政区划");
            regionCodeRyx.setAreaCode("儋州市");
        }

        RegionCodeRyx result = (getBaseMapper()).selectOne(new QueryWrapper<>(regionCodeRyx));
        if (result == null) {
            // 部分城市没有下级区，例如广东省的城市, 或没有对应分区，则直接用城市名当区名查
            regionCodeRyx.setArea(cityName);
        }

        result = (getBaseMapper()).selectOne(new QueryWrapper<>(regionCodeRyx));

        if (result == null) {
            throw new MsgException("没有找到对应的城市地区编码");
        }

        return result;
    }

    /**
     * 根据地区编码获取对应的地区编码信息
     * @param areaCode 地区编码
     * @return 地区编码信息
     */
    default RegionCodeRyx getByAreaCode(String areaCode) {
        RegionCodeRyx regionCodeRyx = new RegionCodeRyx();
        regionCodeRyx.setAreaCode(areaCode);

        return (getBaseMapper()).selectOne(new QueryWrapper<>(regionCodeRyx));
    }


    /**
     * 根据城市名称获取对应的地区编码信息，模糊匹配
     * @param areaName 县/区名称
     * @return 地区编码信息
     */
    default List<RegionCodeRyx> listByAreaName(String areaName) {
        QueryWrapper<RegionCodeRyx> queryWrapper = new QueryWrapper<>();
        queryWrapper.like("area", areaName);

        return (getBaseMapper()).selectList(queryWrapper);
    }

    /**
     * 根据城市名称获取对应的地区编码信息，模糊匹配
     * @param cityName 市名称
     * @return 地区编码信息
     */
    default List<RegionCodeRyx> listByCityName(String cityName) {
        QueryWrapper<RegionCodeRyx> queryWrapper = new QueryWrapper<>();
        queryWrapper.like("city", cityName);

        return (getBaseMapper()).selectList(queryWrapper);
    }

    /**
     * 根据省份名称获取对应的地区编码信息，模糊匹配
     * @param provinceName 省编码
     * @return 地区编码信息
     */
    default List<RegionCodeRyx> listByProvinceName(String provinceName) {
        QueryWrapper<RegionCodeRyx> queryWrapper = new QueryWrapper<>();
        queryWrapper.like("province", provinceName);

        return (getBaseMapper()).selectList(queryWrapper);
    }
}
