package cn.pluss.platform.region;

import cn.pluss.platform.dto.RegionReflectDTO;
import cn.pluss.platform.entity.*;
import cn.pluss.platform.mapper.RegionReflectMapper;
import cn.pluss.platform.vo.RegionReflectVO;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * <p>
 * 不同通道的地区表映射表 服务类
 * </p>
 *
 * @author Djh
 * @since 2021-07-24
 */
public interface RegionReflectService extends IService<RegionReflect> {

    /**
     * 获取乐刷地区code信息
     *
     * @param province 省
     * @param city     市
     * @param area     区/县
     * @return 地区信息
     */
    RegionCodeLs getLsRegionCode(String province, String city, String area);

    /**
     * 获取随行付地区code信息
     *
     * @param province 省
     * @param city     市
     * @param area     区/县
     * @return 地区信息
     */
    RegionCodeSxf getSxfRegionCode(String province, String city, String area);

    /**
     * 获取瑞银信地区code信息
     *
     * @param province 省
     * @param city     市
     * @param area     区/县
     * @return 地区信息
     */
    RegionCodeRyx getRyxRegionCode(String province, String city, String area);

    /**
     * 获取银盛地区code信息
     *
     * @param province 省
     * @param city     市
     * @param area     区/县
     * @return 地区信息
     */
    RegionCodeYs getYsRegionCode(String province, String city, String area);

    /**
     * 获取乐刷地区code信息
     *
     * @param bankCard 银行卡信息
     * @return 地区信息
     */
    default RegionCodeLs getLsRegionCode(BankCard bankCard) {
        return getLsRegionCode(bankCard.getBranchProvince(), bankCard.getBranchCity(), bankCard.getBranchArea());
    }

    /**
     * 获取随行付地区code信息
     *
     * @param bankCard 银行卡信息
     * @return 地区信息
     */
    default RegionCodeSxf getSxfRegionCode(BankCard bankCard) {
        return getSxfRegionCode(bankCard.getBranchProvince(), bankCard.getBranchCity(), bankCard.getBranchArea());
    }

    /**
     * 获取瑞银信地区code信息
     *
     * @param bankCard 银行卡信息
     * @return 地区信息
     */
    default RegionCodeRyx getRyxRegionCode(BankCard bankCard) {
        return getRyxRegionCode(bankCard.getBranchProvince(), bankCard.getBranchCity(), bankCard.getBranchArea());
    }

    /**
     * 获取银盛地区code信息
     *
     * @param bankCard 银行卡信息
     * @return 地区信息
     */
    default RegionCodeYs getYsRegionCode(BankCard bankCard) {
        return getYsRegionCode(bankCard.getBranchProvince(), bankCard.getBranchCity(), bankCard.getBranchArea());
    }

    default Page<RegionReflectVO> pageRegionReflect(Page<RegionReflectVO> page, String province, String city, String area) {
        return ((RegionReflectMapper) getBaseMapper()).selectRegionReflectList(page, province, city, area);
    }


    /**
     * 获取省份列表
     *
     * @param type 类型。sxf、ryx、ys
     * @return 省列表
     */
    List<String> listProvince(String type);

    /**
     * 获取城市列表
     *
     * @param type     类型。sxf、ryx、ys
     * @param province 省
     * @return 市列表
     */
    List<String> listCity(String type, String province);

    /**
     * 获取县/区
     *
     * @param type     类型。sxf、ryx、ys
     * @param city     市
     * @param province 省
     * @return 区列表
     */
    List<String> listArea(String type, String city, String province);

    /**
     * 保存地区映射信息
     *
     * @param reflectDTO 地区映射信息
     */
    void saveReflect(RegionReflectDTO reflectDTO);
}
