############################
# 데이터베이스 사용 이해하기
############################

# from tinydb import TinyDB, Query
import pandas as pd 
from datetime import datetime
from pprint import pprint
from userdblib import fetch_user_by_email, fetch_user_by_id, fetch_users, insert_user, update_user, delete_user, create_table, get_new_id

# # 데이터베이스 생성 및 연결
# db = TinyDB('db.json')

    
# ###########################################
# # 데이터베이스 쿼리 함수들                 #
# ###########################################

# # 데이터가 없으면 샘플 데이터 추가
# def create_table():
#     if len(db.all()) == 0:    
#         users = [
#             {'id': 1, 'name': '전 John', 'email': 'john@gmail.com', 'age': 20, 'created_at': '2021-01-01 00:00:00'},
#             {'id': 2, 'name': '오 Jane', 'email': 'jane@gmail.com', 'age': 25, 'created_at': '2021-01-02 00:00:00'},
#             {'id': 3, 'name': '방 Bob', 'email': 'bob@gmail.com', 'age': 30, 'created_at': '2021-01-03 00:00:00'},
#             {'id': 4, 'name': '윤 Alice', 'email': 'alice@gmail.com', 'age': 35, 'created_at': '2021-01-04 00:00:00'},
#             {'id': 5, 'name': '김 Bill', 'email': 'bill@gmail.com', 'age': 40, 'created_at': '2021-01-05 00:00:00'},
#         ]
#         db.insert_multiple(users)

# def get_new_id():
#     users = fetch_users()
#     new_id = users[-1]['id'] + 1
#     return new_id

# def fetch_users():
#     return db.all()

# def fetch_user_by_id(id):
#     users = db.search(Query().id == id)
#     if len(users) == 0:
#         return []
#     else:
#         return users.pop()

# def fetch_user_by_email(email):
#     users = db.search(Query().email == email)
#     if len(users) == 0:
#         return []
#     else:
#         return users.pop()

# def insert_user(user):
#     # new_user = user_from_input()
#     db.insert(user)

# def update_user(user):
#     db.update(user, Query().id == user['id'])

# def delete_user(id):
#     db.remove(Query().id == id)




###########################################
# 화면 기능 함수들                         #
###########################################

def user_from_input():
    print("#"*30 + " 사용자 정보 입력 " + "#"*30)
    name = input("이름: ")
    email = input("이메일: ")
    age = int(input("나이: "))
    created_at = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    user = {'id': get_new_id(), 'name': name, 'email': email, 'age': age, 'created_at': created_at}
    return user

def user_from_input_update(user):
    print("#"*30 + " 사용자 정보 업데이트 " + "#"*30)
    name = input(f"이름({user['name']}): ")
    email = input(f"이메일({user['email']}): ")
    age = int(input(f"나이({user['age']}): "))
    # created_at = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    user = {'id': user["id"], 'name': name, 'email': email, 'age': age, 'created_at': user["created_at"]}
    return user

# Function to display all users
def display_users():
    users = fetch_users()
    for user in users:
        print(f"ID:{user['id']}\n이름:{user['name']}\n전자메일:{user['email']}\n나이:{user['age']}\n가입날짜:{user['created_at']}\n")
    
def add_new_user():
    user = user_from_input()
    insert_user(user)
    print("새 사용자가 추가되었습니다.")

def update_existing_user():
    print("#"*30 + " 사용자 정보 수정 " + "#"*30)
    id = int(input("수정할 사용자의 ID를 입력하세요: "))
    user = fetch_user_by_id(id)
    if len(user) == 0:
        print("해당 ID의 사용자가 없습니다.")
    else:
        user = user_from_input_update(user)
        user['id'] = id
        update_user(user)
        print("사용자 정보가 수정되었습니다.")

def delete_existing_user():
    print("#"*30 + " 사용자 정보 삭제 " + "#"*30)
    id = int(input("삭제할 사용자의 ID를 입력하세요: "))
    user = fetch_user_by_id(id)
    if len(user) == 0:
        print("해당 ID의 사용자가 없습니다.")
    else:
        delete_user(id)
        print("사용자 정보가 삭제되었습니다.")

def search_user_by_email():
    print("#"*30 + " 사용자 정보 검색 " + "#"*30)
    email = input("검색할 사용자의 이메일을 입력하세요: ")
    user = fetch_user_by_email(email)
    if len(user) == 0:
        print("해당 이메일의 사용자가 없습니다.")
    else:
        print(f"ID:{user['id']}\n이름:{user['name']}\n전자메일:{user['email']}\n나이:{user['age']}\n가입날짜:{user['created_at']}\n")

###########################################


# main 함수
create_table()
while True:
    print("#"*30 + " 사용자 관리 프로그램 " + "#"*30)
    print("1. 사용자 전체 조회")
    print("2. 사용자 추가")
    print("3. 사용자 수정")
    print("4. 사용자 삭제")
    print("5. 이메일로 사용자 검색")
    print("6. 종료")
    print("#"*80)
    menu = int(input("메뉴를 선택하세요: "))
    if menu == 1:
        display_users()
    elif menu == 2:
        add_new_user()
    elif menu == 3:
        update_existing_user()
    elif menu == 4:
        delete_existing_user()
    elif menu == 5:
        search_user_by_email()
    elif menu == 6:
        print("프로그램을 종료합니다.")
        break
    else:
        print("잘못된 메뉴입니다. 다시 선택하세요.")
    