package com.jang.doc.dao;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.stereotype.Repository;

import com.jang.doc.model.User;

@Repository("userDao")
public class UserDaoImpl implements UserDao {
	
	private JdbcTemplate jdbcTemplate;
	private NamedParameterJdbcTemplate jdbcTemplate2;
	
	//Autowired ´Â typeÀ¸·Î °Ë»öÇÑ´Ù.
	@Autowired //component-scan À» ÀÌ¿ëÇÑ °´Ã¼ »ý¼º
	public void setDataSource(DataSource dataSource) { //ÀÇÁ¸°ü°è ÁÖÀÔ
		this.jdbcTemplate = new JdbcTemplate(dataSource);
		this.jdbcTemplate2 = new NamedParameterJdbcTemplate(dataSource);
	}
	

	@Override
	public User getUser(String userId) {
		String GETUSER_ID = "SELECT * FROM member_tbl WHERE ID = ?";	//À§Ä¡ÆÄ¶ó¹ÌÅÍ ¹æ½Ä (°£´ÜÇÏ°Ô »ç¿ëÇÒ¶§ »ç¿ë)
		RowMapper<User> mapper = new BeanPropertyRowMapper<User>(User.class);	//ºó DTO°´Ã¼¿¡ ³»¿ëÀ» ³ÖÀ» ¶§ »ç¿ë
		return this.jdbcTemplate.queryForObject(GETUSER_ID, mapper, userId);	//queryxxxÇü ¸Þ¼Òµå°¡ ÀÖ´Âµ¥ µ¥ÀÌÅÍÇüÀ» ¸ð¸£¸é Object»ç¿ë, Select¹®¿¡¼­ »ç¿ë
	}
	@Override
	public User getPass(String pass) {
		String GETUSER_PASS = "SELECT * FROM member_tbl WHERE PASS = ?";	//À§Ä¡ÆÄ¶ó¹ÌÅÍ ¹æ½Ä (°£´ÜÇÏ°Ô »ç¿ëÇÒ¶§ »ç¿ë)
		RowMapper<User> mapper = new BeanPropertyRowMapper<User>(User.class);	//ºó DTO°´Ã¼¿¡ ³»¿ëÀ» ³ÖÀ» ¶§ »ç¿ë
		return this.jdbcTemplate.queryForObject(GETUSER_PASS, mapper, pass);
	}
	

	@Override
	public void updateUser(User user) {
		String SQL_UP = "UPDATE member_tbl SET pass=:pass, zip=:zip, addr1=:addr1, addr2=:addr2, "	//ÀÌ¸§ÆÄ¶ó¹ÌÅÍ ¹æ½Ä (DTO°´Ã¼¿Í ÀÌ¸§ÀÌ °°¾Æ¾ßÇÔ) 
				+"phone=:phone, email=:email WHERE id =:id";
		
		SqlParameterSource parameterSource = new BeanPropertySqlParameterSource(user);	//DTO°´Ã¼ÀÇ ·¹ÄÚµå¼ÂÀÌ Âù ±×¸©
		this.jdbcTemplate2.update(SQL_UP, parameterSource);	//SELECT¸¦ Á¦¿ÜÇÑ DML¿¡¼­ »ç¿ë

	}

	@Override
	public void insertUser(User user) {
		String SQL_INS = "INSERT INTO member_tbl (no, id, pass, name, zip, addr1, addr2, phone, email)"
				+" VALUES( seq_no.nextval, :id, :pass, :name, :zip, :addr1, :addr2, :phone, :email)";
		
		SqlParameterSource parameterSource = new BeanPropertySqlParameterSource(user);	//¿­ ±×¸©
		
		this.jdbcTemplate2.update(SQL_INS, parameterSource);	//update¿Í Äõ¸®°¡ µÎ°³ ÀÖÀ½

	}

	@Override
	public void deleteUser(User user, User phone) {
		// TODO Auto-generated method stub

	}
	
	@Override
	public User findId(String name, String email) {
		String SQL_GETID = "select * from member_tbl where name=? and email=?";
		RowMapper<User> mapper = new BeanPropertyRowMapper<User>(User.class);
		return this.jdbcTemplate.queryForObject(SQL_GETID, mapper,name,email);
	}
	
	@Override
	public User findPass(String userId, String email) {
		String SQL_GETPASS = "select * from member_tbl where id=? and email=?";
		RowMapper<User> mapper = new BeanPropertyRowMapper<User>(User.class);
		return this.jdbcTemplate.queryForObject(SQL_GETPASS, mapper,userId,email);
	}
	
	@Override
	public void updatePass(User user) {
		// TODO Auto-generated method stub
		String SQL_UP = "UPDATE member_tbl SET pass=:pass, zip=:zip, addr1=:addr1, addr2=:addr2, "	//ÀÌ¸§ÆÄ¶ó¹ÌÅÍ ¹æ½Ä (DTO°´Ã¼¿Í ÀÌ¸§ÀÌ °°¾Æ¾ßÇÔ) 
				+"phone=:phone, email=:email WHERE id =:id";
		
		SqlParameterSource parameterSource = new BeanPropertySqlParameterSource(user);	//DTO°´Ã¼ÀÇ ·¹ÄÚµå¼ÂÀÌ Âù ±×¸©
		this.jdbcTemplate2.update(SQL_UP, parameterSource);	//SELECT¸¦ Á¦¿ÜÇÑ DML¿¡¼­ »ç¿ë

	}

}
