import re
import pandas as pd
import mysql.connector
import numpy as np
import requests
from used_pc_price_from_api_cpu_gpu_ram_hdd_table_entire_update_for_item_save_joblib import ensure_connection, process_na_price, clean_price
from db_config import get_db_connection

# 환율 정보를 가져오는 함수
def get_exchange_rate():
    try:
        response = requests.get("https://api.exchangerate-api.com/v4/latest/USD")
        data = response.json()
        return data['rates']['KRW']
    except:
        print("환율 정보를 가져오는데 실패했습니다. 기본 환율 1300원을 사용합니다.")
        return 1300

# USD를 KRW로 변환하는 함수
def usd_to_krw(usd_price, exchange_rate):
    return int(usd_price * exchange_rate)

# db 객체 생성
db = get_db_connection()
cursor = db.cursor()

# api___price_cpu_single 테이블에서 데이터 가져오기
query = "SELECT * FROM api___price_cpu_single ORDER BY `rank`"
# 쿼리 실행 전 연결 확인
ensure_connection(db)
df_cpu = pd.read_sql_query(query, db)

# price_org 컬럼 데이터 정제
df_cpu['price_clean'] = df_cpu['price_org'].apply(clean_price)

# NA 값 처리
df_cpu['price'] = df_cpu['price_clean'].fillna(method='ffill')

# price 열을 숫자로 변환
df_cpu['price'] = pd.to_numeric(df_cpu['price'], errors='coerce')

# NaN 값 처리 (선택 사항)
df_cpu['price'] = df_cpu['price'].fillna(df_cpu['price'].mean())

# 정제된 가격 데이터를 MySQL에 업데이트
# price 컬럼의 값을 소수점 이하 2자리까지 반올림
df_cpu['price'] = df_cpu['price'].round(2)

# 환율 정보 가져오기
exchange_rate = get_exchange_rate()
print(f"현재 환율: 1 USD = {exchange_rate} KRW")

# api___ai_suggested_price_of_cpu 테이블 생성 및 데이터 입력
def create_ai_suggested_price_table(cursor, df_cpu, exchange_rate):
    # 테이블 생성 (이미 존재한다면 삭제 후 재생성)
    cursor.execute("DROP TABLE IF EXISTS api___ai_suggested_price_of_cpu")
    create_table_query = """
    CREATE TABLE api___ai_suggested_price_of_cpu (
        id INT AUTO_INCREMENT PRIMARY KEY,
        cpu_name VARCHAR(255),
        price INT
    )
    """
    cursor.execute(create_table_query)

    # 데이터 삽입
    for _, row in df_cpu.iterrows():
        krw_price = usd_to_krw(row['price'], exchange_rate)
        insert_query = """
        INSERT INTO api___ai_suggested_price_of_cpu (cpu_name, price)
        VALUES (%s, %s)
        """
        cursor.execute(insert_query, (row['cpu_name'], krw_price))  # 'name' 대신 'model' 사용

# api___ai_suggested_price_of_cpu 테이블 생성 및 데이터 입력
create_ai_suggested_price_table(cursor, df_cpu, exchange_rate)

db.commit()
cursor.close()
db.close()

print("api___price_cpu_single 테이블의 price 컬럼과 api___ai_suggested_price_of_cpu 테이블이 업데이트되었습니다.")
