package com.neusoft.smart.pos.user.service;

import com.neusoft.smart.pos.user.persistent.domain.UserLoginRecordExample;
import com.neusoft.smart.pos.user.persistent.domain.UserLoginRecordKey;
import com.neusoft.smart.pos.user.persistent.mapper.UserLoginRecordMapper;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

@Service
public class LoginRecordService {
    @Resource
    UserLoginRecordMapper userLoginRecordMapper;

    public int addUserLoginRecord(String username, String sn, int orgId, int shopId) {
        List<UserLoginRecordKey> userLoginRecordKeys = selectRecordBySN(sn);
        if(userLoginRecordKeys.size() >= 1) {
            UserLoginRecordKey loginRecordKey = userLoginRecordKeys.get(userLoginRecordKeys.size() - 1);
            if(loginRecordKey.getStatus().equals("1")) { //最后一条该SN的记录为登入
                // 先登出
                addUserLogoutRecord(loginRecordKey.getUsername(), sn, loginRecordKey.getOrgId(), loginRecordKey.getShopId(), "0");
            }
        }
        UserLoginRecordKey userLoginRecordKey = new UserLoginRecordKey();
        userLoginRecordKey.setUsername(username);
        userLoginRecordKey.setSerialNo(sn);
        userLoginRecordKey.setOrgId(orgId);
        userLoginRecordKey.setShopId(shopId);
        userLoginRecordKey.setStatus("1");
        return userLoginRecordMapper.insert(userLoginRecordKey);
    }

    public int addUserLogoutRecord(String username, String sn, int orgId, int shopId, String isShift) {
        UserLoginRecordKey userLoginRecordKey = new UserLoginRecordKey();
        userLoginRecordKey.setUsername(username);
        userLoginRecordKey.setSerialNo(sn);
        userLoginRecordKey.setOrgId(orgId);
        userLoginRecordKey.setShopId(shopId);
        userLoginRecordKey.setStatus("2");
        if(isShift == null) {
            isShift = "0";
        }
        userLoginRecordKey.setIsShift(isShift);
        return userLoginRecordMapper.insert(userLoginRecordKey);
    }

    public List<UserLoginRecordKey> selectRecordBySN(String sn) {
        if(sn != null) {
            UserLoginRecordExample userLoginRecordExample = new UserLoginRecordExample();
            userLoginRecordExample.createCriteria().andSerialNoEqualTo(sn);
            return userLoginRecordMapper.selectByExample(userLoginRecordExample);
        }
        return null;
    }

    public UserLoginRecordKey selectLastShiftedRecordBySN(String sn) {
        if(sn != null) {
            UserLoginRecordExample userLoginRecordExample = new UserLoginRecordExample();
            userLoginRecordExample.createCriteria()
                    .andSerialNoEqualTo(sn)
                    .andIsShiftEqualTo("1");
            List<UserLoginRecordKey> recordKeyList = userLoginRecordMapper.selectByExample(userLoginRecordExample);
            return recordKeyList.size() > 0 ? recordKeyList.get(recordKeyList.size()-1) : null;
        }
        return null;
    }

    public UserLoginRecordKey selectLoginTimeAfterLastShifted(String sn) {
        if(sn != null) {
            UserLoginRecordKey lastShiftedRecord = selectLastShiftedRecordBySN(sn);
            UserLoginRecordExample userLoginRecordExample = new UserLoginRecordExample();
            if(lastShiftedRecord != null) {
                Date startTime = lastShiftedRecord.getCreatedAt();
                userLoginRecordExample.createCriteria()
                        .andSerialNoEqualTo(sn)
                        .andCreatedAtGreaterThan(startTime)
                        .andStatusEqualTo("1");
            } else {
                userLoginRecordExample.createCriteria()
                        .andSerialNoEqualTo(sn)
                        .andStatusEqualTo("1");
            }
            List<UserLoginRecordKey> recordKeyList = userLoginRecordMapper.selectByExample(userLoginRecordExample);
            return recordKeyList.size()>0 ? recordKeyList.get(0) : null;
        }
        return null;
    }
}
