package com.mandi.system.service.impl;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import javax.annotation.Resource;
import javax.transaction.Transactional;

import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

import com.mandi.common.BasicMethod;
import com.mandi.dao.common.Daomethod;
import com.mandi.dao.common.ObjectResult;
import com.mandi.dao.common.PageRequest;
import com.mandi.dao.common.PageResult;
import com.mandi.fendan.mapper.Fd_CompanyMapper;
import com.mandi.fendan.persist.Fd_Company;
import com.mandi.system.mapper.FduserMapper;
import com.mandi.system.mapper.LoginMapper;
import com.mandi.system.persist.Login;
import com.mandi.system.persist.LoginSide;
import com.mandi.system.persist.User;
import com.mandi.system.persist.UserType;
import com.mandi.system.service.IFdUserService;

@Service
public class FdUserService implements IFdUserService{
	@Resource
	private FduserMapper uper;
	@Resource
	private LoginMapper lper;
	@Resource
	private Fd_CompanyMapper fdcper;
	

	@Override
	@Transactional(rollbackOn=Exception.class)
	public ObjectResult<Login> loginUser(String username, String password,String ipadd)throws Exception {
		ObjectResult<Login> orr=new ObjectResult<Login>();
		User u=uper.getbyUname(username);
		if(u==null){
			orr.setCode(1);
			orr.setErrmsg("用户名不存在,请重新登录!");
			return orr;
		}
		if(!u.isState()){
			orr.setCode(1);
			orr.setErrmsg("该账号已禁止登录!");
			return orr;
		}
		if(!BasicMethod.encryptSHA(password).equals(u.getPassword())){
			orr.setCode(1);
			orr.setErrmsg("密码不正确请重新登录!");
			return orr;
		}
		Fd_Company fd=fdcper.getByCompanyNo(u.getCompanyNo());
		Login lg=new Login();
		lg.setDepart(0);
		if(fd!=null){
			lg.setDepartname(fd.getName());
			lg.setDepartno(fd.getCompanyNo());
		}
		lg.setId(0);
		lg.setIpaddr(ipadd);
		lg.setLoginside(LoginSide.back);
		lg.setLogintime(new Date());
		lg.setPhone(u.getPhone());
		lg.setUserid(u.getId());
		lg.setUsername(u.getUsername());
		lg.setWorkername(u.getName());
		lg.setWorkerno(u.getUtype()+"");
		lper.insert(lg);
		orr.setCode(0);
		orr.setItem(lg);
		return orr;
	}


	@Override
	public ObjectResult<Boolean> logout(Login login) {
		ObjectResult<Boolean> or=new ObjectResult<Boolean>();
		if(login==null){
			or.setCode(1);
			or.setErrmsg("不存在登录信息!");
			return or;
		}
		int i=lper.logout(login.getId());
		if(i>0){
			or.setCode(0);
		}else{
			or.setCode(2);
			or.setErrmsg("不能保存登录退出信息!");
		}
		return or;
	}


	@Override
	public ObjectResult<Boolean> saveState(String id, boolean state,Login lg) {
		ObjectResult<Boolean> orr=new ObjectResult<Boolean>();
		if(lg==null){
			orr.setCode(1);
			orr.setErrmsg("账号已退出,请重新登录账号!");
			return orr;
		}
		if(!UserType.admin.toString().equals(lg.getWorkerno())){
			orr.setCode(1);
			orr.setErrmsg("登录账号不是管理员不能操作!");
			return orr;
		}
		User u=uper.getbyId(id);
		if(u==null){
			orr.setCode(1);
			orr.setErrmsg("该用户不存在,不能操作!");
			return orr;
		}
		u.setState(state);
		uper.updatebyId(u);
		
		orr.setCode(0);
		orr.setItem(state);
		return orr;
	}


	@Override
	@Transactional(rollbackOn=Exception.class)
	public ObjectResult<User> saveUser(User u,Login lg) throws Exception {
		ObjectResult<User> orr=new ObjectResult<User>();
		if(lg==null){
			orr.setCode(1);
			orr.setErrmsg("账号已退出,请重新登录账号!");
			return orr;
		}
		if(!UserType.admin.toString().equals(lg.getWorkerno())){
			orr.setCode(1);
			orr.setErrmsg("登录账号不是管理员不能操作!");
			return orr;
		}
		if(u==null){
			orr.setCode(1);
			orr.setErrmsg("用户对象为空,不能保存!");
			return orr;
		}
		if(StringUtils.isEmpty(u.getUsername())){
			orr.setCode(1);
			orr.setErrmsg("用户名为空,不能保存!");
			return orr;
		}
		if(StringUtils.isEmpty(u.getName())){
			orr.setCode(1);
			orr.setErrmsg("用户姓名为空,不能保存!");
			return orr;
		}
//		Fd_Company fdc=fdcper.getByCompanyNo(u.getCompanyNo());
//		if(fdc==null){
//			orr.setCode(1);
//			orr.setErrmsg("物流公司不存在,请选择正确的物流公司!");
//			return orr;
//		}
		String id=u.getId();
		User us1=uper.getbyId(id);
		User us2=uper.getbyUname(u.getUsername());
		if(us2!=null){
			if(us1!=null){
				if(!us2.getId().equals(us1.getId())){
					orr.setCode(1);
					orr.setErrmsg("该用户名已存在!");
					return orr;
				}
			}else{
				orr.setCode(1);
				orr.setErrmsg("该用户名已存在!");
				return orr;
			}
		}
		if(us1!=null){
			if(!StringUtils.isEmpty(u.getPassword())){
				String encpwd=BasicMethod.encryptSHA(u.getPassword());
				u.setPassword(encpwd);
			}else{
				u.setPassword(us1.getPassword());
			}
			uper.updatebyId(u);
		}else{
			if(StringUtils.isEmpty(u.getPassword())){
				orr.setCode(1);
				orr.setErrmsg("用户密码为空,不能保存!");
				return orr;
			}
			String encpwd=BasicMethod.encryptSHA(u.getPassword());
			u.setPassword(encpwd);
			u.setId(UUID.randomUUID()+"");
			uper.insert(u);
		}
		orr.setCode(0);
		orr.setItem(u);
		return orr;
	}


	@Override
	public PageResult<Map<String, Object>> getUserMlist(String searchword,
			String companyNo, PageRequest pr) {
		PageResult<Map<String, Object>> prr=new PageResult<Map<String,Object>>();
		
		Map<String, Object> mp=new HashMap<String, Object>();
		
		mp.put("pagesize",pr.getPageSize() );
		mp.put("page",pr.getStart());
		mp.put("keyword", searchword);
		mp.put("companyNo", companyNo);
		if(pr.isNeedPages()){
			int cc=uper.getcount(mp);
			int pages=Daomethod.countpages(cc, pr.getPageSize());
			prr.setPages(pages);
		}
		List<Map<String, Object>> ll=uper.getMList(mp);
		prr.setCode(0);
		prr.setList(ll);
		return prr;
	}


	@Override
	@Transactional(rollbackOn=Exception.class)
	public ObjectResult<Boolean> delUser(String id,Login lg) throws Exception {
		ObjectResult<Boolean> orr=new ObjectResult<Boolean>();
		if(lg==null){
			orr.setCode(1);
			orr.setErrmsg("账号已退出,请重新登录账号!");
			return orr;
		}
		if(!UserType.admin.toString().equals(lg.getWorkerno())){
			orr.setCode(1);
			orr.setErrmsg("登录账号不是管理员不能操作!");
			return orr;
		}
		User u=uper.getbyId(id);
		if(u==null){
			orr.setCode(1);
			orr.setErrmsg("用户不存在,不能删除!");
			return orr;
		}
		uper.delbyId(id);
		orr.setCode(0);
		orr.setItem(true);
		return orr;
	}


	@Override
	public ObjectResult<User> getUser(String id) {
		ObjectResult<User> orr=new ObjectResult<User>();
		User u=uper.getbyId(id);
		orr.setCode(0);
		orr.setItem(u);
		return orr;
	}


	@Override
	@Transactional(rollbackOn=Exception.class)
	public ObjectResult<Boolean> updateUserPwd(String oldpwd, String newpwd,Login lg)
			throws Exception {
		ObjectResult<Boolean> orr=new ObjectResult<Boolean>();
		if(lg==null){
			orr.setCode(1);
			orr.setErrmsg("账号已退出,请重新登录账号!");
			return orr;
		}
		User u=uper.getbyId(lg.getUserid());
		if(u==null){
			orr.setCode(1);
			orr.setErrmsg("用户不存在,不能修改密码!");
			return orr;
		}
		oldpwd=BasicMethod.encryptSHA(oldpwd);
		newpwd=BasicMethod.encryptSHA(newpwd);
		if(!u.getPassword().equals(oldpwd)){
			orr.setCode(1);
			orr.setErrmsg("密码错误不能修改!");
			return orr;
		}
		u.setPassword(newpwd);
		uper.updatebyId(u);
		orr.setCode(0);
		orr.setItem(true);
		return orr;
	}
	
	
	

}