// database access
// 데이터 접근 객체

package member;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import board.Board;
import member.Member;

public class MemberDAO {
	private Connection conn;
	private PreparedStatement pstmt;
	private ResultSet rs;
	
	public MemberDAO() { // 데이터베이스 연결
		try {
			String dbURL = "jdbc:mysql://localhost:3306";
			String dbID = "DB 아이디";
			String dbPassword = "DB 비밀번호";
			Class.forName("com.mysql.cj.jdbc.Driver");
			conn = DriverManager.getConnection(dbURL, dbID, dbPassword);
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
	
	public int login(String userID, String userPassword) { // 로그인 함수
			String SQL = "SELECT userPassword FROM MEMBER WHERE userID = ?";
			try {
				pstmt = conn.prepareStatement(SQL);
				pstmt.setString(1,  userID);
				rs = pstmt.executeQuery();
				if(rs.next()) { // 아이디가 존재하는 경우
					if(rs.getString(1).equals(userPassword))
						return 1; // 비밀번호가 일치하는 경우 - 로그인 성공
					else
						return 0; // 비밀번호가 일치하지 않는 경우
				}
				return -1; // 아이디가 존재하지 않는 경우
			} catch(Exception e) {
				e.printStackTrace();
			}
			return -2; // 데이터베이스 오류 발생시
	}
	
	public int join(Member user) { // 회원 가입 함수
		String SQL = "INSERT INTO MEMBER VALUES(?, ?, ?, ?, ?)";
		try {
			pstmt = conn.prepareStatement(SQL);
			pstmt.setString(1, user.getUserID());
			pstmt.setString(2, user.getUserPassword());
			pstmt.setString(3, user.getUserName());
			pstmt.setString(4, user.getUserGender());
			pstmt.setString(5, user.getUserEmail());
			
			return pstmt.executeUpdate(); // 해당 statement를 실행한 결과를 삽입 - 회원가입 성공
		} catch(Exception e) {
			e.printStackTrace();
		}
		return -1; // 데이터베이스 오류 발생시
	}
	
	public Member getInfo(String userID) { // 특정 회원 정보를 불러오는 함수
		String SQL = "SELECT * FROM MEMBER WHERE userID = ?"; // 특정 아이디에 해당하는 회원 정보를 가져옴
		try {
			PreparedStatement pstmt = conn.prepareStatement(SQL);
			pstmt.setString(1, userID);
			rs = pstmt.executeQuery();
			if(rs.next()) {
				Member member = new Member();
				member.setUserID(rs.getString(1));
				member.setUserPassword(rs.getString(2));
				member.setUserName(rs.getString(3));
				member.setUserGender(rs.getString(4));
				member.setUserEmail(rs.getString(5));
				
				return member; // 특정 회원 정보를 반환
			}
		} catch(Exception e) {
			e.printStackTrace();
		}
		return null; // 회원 정보가 존재하지 않는 경우
	}
	
	public int update(String userID, String userPassword, String userName, String userEmail) { // 회원 정보 수정 - 아이디 성별은 변경 불가능
		String SQL = "UPDATE MEMBER SET userPassword = ?, userName = ?, userEmail = ? WHERE userID = ?";
		try {
			PreparedStatement pstmt = conn.prepareStatement(SQL);
			pstmt.setString(1,  userPassword);
			pstmt.setString(2,  userName);
			pstmt.setString(3, userEmail);
			pstmt.setString(4, userID);

			return pstmt.executeUpdate(); // 성공적으로 실행한 경우
		} catch(Exception e) {
			e.printStackTrace();
		}
		return -1; // 데이터베이스 오류 발생 시 -1 반환
	}

}