package com.cku.service;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.cab.dao.CabThirdPartyMapper;
import com.cab.dao.UserMapper;
import com.cab.model.CabThirdParty;
import com.cab.model.User;
import com.cku.core.ExecResultModel;
import com.cku.core.ZAErrorCode;
import com.cku.dao.CkuDvUserMapper;
import com.cku.model.CkuDvUserModel;
import com.cku.util.Debugger;
import com.cku.util.MD5Generator;
import com.sys.dao.AreaMapper;
import com.sys.dao.CityMapper;
import com.sys.dao.ProvinceMapper;
import com.sys.service.TokenService;

@Service("ckuDvUserService")
public class CkuDvUserServiceImpl {

	@Autowired
	public CkuDvUserMapper ckuDvUserMapper;
	
	@Autowired
	public UserMapper userMapper;
	
	@Autowired
	public CabThirdPartyMapper cabThirdPartyMapper;
	
	@Autowired
	public ProvinceMapper provinceMapper;
	
	@Autowired
	public CityMapper cityMapper;
	
	@Autowired
	public AreaMapper areaMapper;
	
	/**
	 * 
	 * @Description：验证CKU会员登录
	 * @author: zhuoHeng
	 * @version: 2016年4月11日 上午9:31:53
	 * @throws Exception 
	 */
	public User ckuMemberLogin(String userName,String passWord,String ip,String flag,String dynamic) throws Exception{
		
		
		//查询CKU用户信息
		CkuDvUserModel ckuDvUserModel = ckuDvUserMapper.ckuMemberLogin(userName);
		Debugger.doAssert(ckuDvUserModel != null, ZAErrorCode.ZA_ERC_KEY_NOT_FOUND, "账户名或密码错误");
		String md5 = MD5Generator.generate(ckuDvUserModel.getPassWord() + dynamic);
		User user = new User();
		//验证CKU用户密码
		Debugger.doAssert(md5.equals(passWord), ZAErrorCode.ZA_ERC_KEY_NOT_FOUND, "账户名或密码错误");
		if(md5.equals(passWord)){
			//是否为绑定验证（绑定CKU会员账号只在验证账号密码通过后返回CKU会员用户id）
			if(!"flag".equals(flag)){
				CabThirdParty obj = cabThirdPartyMapper.selectByPrimaryKey(ckuDvUserModel.getUserId());
				//若不存在CKU用户的对应数据，生成宠爱王国账户记录
				if("".equals(obj)||obj==null){
					user.setUsername("");
					user.setPassword("");
					user.setPhone("");
					user.setRegistIp(ip);
					user.setName(ckuDvUserModel.getUserName());
					//注册宠爱王国用户
					userMapper.insertSelective(user);
					CabThirdParty cabThirdParty = new CabThirdParty();
					cabThirdParty.setCabUserId(new Long(user.getId()).intValue());
					cabThirdParty.setCkuUserId(ckuDvUserModel.getUserId());
					//第三方表中添加cku会员关联
					cabThirdPartyMapper.insertSelective(cabThirdParty);
					user.setAge("0");
				}else{
					user = userMapper.selectByPrimaryId(obj.getCabUserId());
					String provinceName = "";
					if(user.getProvinceId()!=null){
						provinceName = provinceMapper.getProvince(user.getProvinceId().toString());
					}
					String cityName = "";
					if(user.getCityId()!=null){
						cityName = cityMapper.getCity(user.getCityId().toString());
					}
					String areaName = "";
					if(user.getAreaId()!=null){
						areaName = areaMapper.getArea(user.getAreaId().toString());
					}
					//控制省市区展示
					if(provinceName==null){
						user.setAddAess("");
					}else if(cityName==null){
						user.setAddAess(provinceName);
					}else if(areaName==null){
						user.setAddAess(provinceName+" "+cityName);
					}else {
						user.setAddAess(provinceName+" "+cityName+" "+areaName);
					}
					if(user.getPayPassWord()!=null &&"".equals(user.getPayPassWord())){
						user.setHasPpsw(true);
					}
				}
				String token = TokenService.instance().registerToken(user.getId());
				user.setToken(token);
				user.setPassword("");
				
				user.setUsername("");
				user.setThreeLoginType("cku");
				user.setId(null);
				user.setRegistIp("");
				user.setVipNum(ckuDvUserModel.getCkuId());
				user.setCodeTime(null);
				user.setRandomCode(null);
				user.setCardId(null);
				//返回是否存在支付密码
				if(user.getPayPassWord()!=null&&!"".equals(user.getPayPassWord())){
					user.setHasPpsw(true);
				}
				user.setPayPassWord(null);
			}else {
				user.setVipNum(ckuDvUserModel.getUserId());
			}
		}
		return user;
	}
	
	/**
	 * 
	 * @Description：MD5加密
	 * @author: 
	 * @version: 2016年4月11日 下午6:35:54
	 */
	private static String madeMD5forPW(String plainText) {
		String result = null;
		try {
			MessageDigest md = MessageDigest.getInstance("MD5");
			md.update(plainText.getBytes());
			byte b[] = md.digest();
			int i;
			StringBuffer buf = new StringBuffer("");
			for (int offset = 0; offset < b.length; offset++) {
				i = b[offset];
				if (i < 0)
					i += 256;
				if (i < 16)
					buf.append("0");
				buf.append(Integer.toHexString(i));
			}
			result = buf.toString().substring(8, 24);
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
		return result;
	}
}
