package org.anychat.action;

import java.util.Date;
import java.util.List;

import org.anychat.config.ChatGroupUserConfig;
import org.anychat.dao.base.ChatGroupUserMapper;
import org.anychat.model.base.ChatGroupUser;
import org.anychat.model.base.ChatGroupUserCriteria;
import org.anychat.tool.StringUtil;
import org.apache.ibatis.session.SqlSession;
import org.grain.mariadb.MybatisManager;

public class ChatGroupUserAction {
	public static List<ChatGroupUser> getChatGroupUserList(String userId, String chatGroupId) {

		SqlSession sqlSession = null;
		List<ChatGroupUser> chatGroupUserList = null;
		try {
			sqlSession = MybatisManager.getSqlSession();
			ChatGroupUserMapper chatGroupUserMapper = sqlSession.getMapper(ChatGroupUserMapper.class);
			ChatGroupUserCriteria chatGroupUserCriteria = new ChatGroupUserCriteria();
			ChatGroupUserCriteria.Criteria criteria = chatGroupUserCriteria.createCriteria();
			if (!StringUtil.stringIsNull(userId)) {
				criteria.andUserIdEqualTo(userId);
			}
			if (!StringUtil.stringIsNull(chatGroupId)) {
				criteria.andChatGroupIdEqualTo(chatGroupId);
			}
			chatGroupUserList = chatGroupUserMapper.selectByExample(chatGroupUserCriteria);
			if (chatGroupUserList == null) {
				MybatisManager.log.warn("通过userId:" + userId + ",chatGroupId:" + chatGroupId + "获取聊天组为空");
			}
		} catch (Exception e) {
			if (sqlSession != null) {
				sqlSession.rollback();
			}
			MybatisManager.log.error("获取聊天组异常", e);
			return null;
		} finally {
			if (sqlSession != null) {
				sqlSession.close();
			}
		}
		return chatGroupUserList;
	}

	public static ChatGroupUser updateChatGroupUser(String userId, String chatGroupId, Date chatCreateTime) {
		if (StringUtil.stringIsNull(userId) || StringUtil.stringIsNull(chatGroupId)) {
			return null;
		}
		List<ChatGroupUser> chatGroupUserList = getChatGroupUserList(userId, chatGroupId);
		if (chatGroupUserList == null || chatGroupUserList.size() == 0) {
			return null;
		}
		ChatGroupUser chatGroupUser = new ChatGroupUser();
		chatGroupUser.setUserId(userId);
		chatGroupUser.setChatGroupId(chatGroupId);
		chatGroupUser.setChatGroupUserUpdateTime(chatCreateTime);
		SqlSession sqlSession = null;
		try {
			sqlSession = MybatisManager.getSqlSession();
			ChatGroupUserMapper chatGroupUserMapper = sqlSession.getMapper(ChatGroupUserMapper.class);
			ChatGroupUserCriteria chatGroupUserCriteria = new ChatGroupUserCriteria();
			ChatGroupUserCriteria.Criteria criteria = chatGroupUserCriteria.createCriteria();
			criteria.andUserIdEqualTo(userId);
			criteria.andChatGroupIdEqualTo(chatGroupId);
			criteria.andChatGroupUserUpdateTimeLessThan(chatCreateTime);
			int result = chatGroupUserMapper.updateByExampleSelective(chatGroupUser, chatGroupUserCriteria);
			if (result != 1) {
				MybatisManager.log.warn("修改聊天组用户失败");
				return null;
			}
			sqlSession.commit();
		} catch (Exception e) {
			if (sqlSession != null) {
				sqlSession.rollback();
			}
			MybatisManager.log.error("修改聊天组用户异常", e);
			return null;
		} finally {
			if (sqlSession != null) {
				sqlSession.close();
			}
		}
		return getChatGroupUserList(userId, chatGroupId).get(0);
	}

	public static ChatGroupUser createChatGroupUser(String userId, String chatGroupId, String chatGroupUserRealName, int chatGroupUserRole) {
		if (StringUtil.stringIsNull(userId) || StringUtil.stringIsNull(chatGroupId)) {
			return null;
		}
		ChatGroupUser chatGroupUser = new ChatGroupUser();
		chatGroupUser.setUserId(userId);
		chatGroupUser.setChatGroupId(chatGroupId);
		if (!StringUtil.stringIsNull(chatGroupUserRealName)) {
			chatGroupUser.setChatGroupUserRealName(chatGroupUserRealName);
		}
		if (chatGroupUserRole == ChatGroupUserConfig.CHAT_GROUP_USER_ROLE_ADMIN) {
			chatGroupUser.setChatGroupUserRole((byte) chatGroupUserRole);
		} else {
			chatGroupUser.setChatGroupUserRole((byte) ChatGroupUserConfig.CHAT_GROUP_USER_ROLE_MEMBER);
		}
		chatGroupUser.setChatGroupUserUpdateTime(new Date());
		SqlSession sqlSession = null;
		try {
			sqlSession = MybatisManager.getSqlSession();
			ChatGroupUserMapper chatGroupUserMapper = sqlSession.getMapper(ChatGroupUserMapper.class);
			int result = chatGroupUserMapper.insert(chatGroupUser);
			if (result == 0) {
				MybatisManager.log.warn("创建聊天组用户失败");
				return null;
			}
			sqlSession.commit();
			return chatGroupUser;
		} catch (Exception e) {
			if (sqlSession != null) {
				sqlSession.rollback();
			}
			MybatisManager.log.error("创建聊天组用户异常", e);
			return null;
		} finally {
			if (sqlSession != null) {
				sqlSession.close();
			}
		}
	}
}