package com.book.dao;

import com.book.domain.ReaderCard;
import com.book.domain.ReaderInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowCallbackHandler;
import org.springframework.stereotype.Repository;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;

@Repository
public class ReaderCardDao {

    private JdbcTemplate jdbcTemplate;
    //根据用户查询的SQL语句
    private final static String MATCH_COUNT_SQL="select count(*) from reader_card where reader_id = ? and passwd = ? ";
    private final static String FIND_READER_BY_USERID="select reader_id, name, passwd, card_state from reader_card where reader_id = ? ";
    private final static String RE_PASSWORD_SQL="UPDATE reader_card set passwd = ? where reader_id = ? ";
    private final static String ADD_READERCARD_SQL="INSERT INTO reader_card (reader_id,name) values ( ? , ?)";
    private final static String UPDATE_READER_NAME_SQL="UPDATE reader_card set name = ? where reader_id = ?";


    @Autowired
    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public int getMatchCount(int readerId,String passwd){
        return jdbcTemplate.queryForObject(MATCH_COUNT_SQL,new Object[]{readerId,passwd},Integer.class);
    }

    public ReaderCard findReaderByReaderId(int userId){
        final ReaderCard readerCard=new ReaderCard();
        jdbcTemplate.query(FIND_READER_BY_USERID, new Object[]{userId},
                //匿名类实现的回调函数
                new RowCallbackHandler() {
                    public void processRow(ResultSet resultSet) throws SQLException {
                        readerCard.setReaderId(resultSet.getInt("reader_id"));
                        readerCard.setPasswd(resultSet.getString("passwd"));
                        readerCard.setName(resultSet.getString("name"));
                        readerCard.setCardState(resultSet.getInt("card_state"));
                    }
                });
        return readerCard;
    }

    public int rePassword(int readerId,String newPasswd){
        return jdbcTemplate.update(RE_PASSWORD_SQL,new Object[]{newPasswd,readerId});
    }

    public int addReaderCard(ReaderInfo readerInfo){

        String name=readerInfo.getName();
        int readerId=readerInfo.getReaderId();

        return jdbcTemplate.update(ADD_READERCARD_SQL,new Object[]{readerId,name});
    }

    public int updateName(int readerId,String name){
        return jdbcTemplate.update(UPDATE_READER_NAME_SQL,new Object[]{name,readerId,});
    }
}