"""
PostgreSQL 数据库操作模块
"""
import psycopg2
from psycopg2.extras import RealDictCursor
import os

# 数据库连接配置
DATABASE_URL = os.getenv("DATABASE_URL", "postgresql://homerenovation:home123@localhost:5432/homerenovation")

def get_db_connection():
    """获取数据库连接"""
    return psycopg2.connect(DATABASE_URL, cursor_factory=RealDictCursor)

def save_layout(layout_id, filename, file_size, upload_time, status, image_path):
    """保存户型图信息到数据库"""
    try:
        conn = get_db_connection()
        cur = conn.cursor()
        cur.execute(
            """INSERT INTO layouts (layout_id, filename, file_size, upload_time, status, image_path)
               VALUES (%s, %s, %s, %s, %s, %s)""",
            (layout_id, filename, file_size, upload_time, status, image_path)
        )
        conn.commit()
        cur.close()
        conn.close()
        print(f"✅ 户型图已保存到数据库: {layout_id}")
        return True
    except Exception as e:
        print(f"❌ 数据库保存失败: {e}")
        return False

def get_layout(layout_id):
    """从数据库查询户型图信息"""
    try:
        conn = get_db_connection()
        cur = conn.cursor()
        cur.execute(
            """SELECT layout_id, filename, file_path, file_size, upload_time, status 
               FROM layouts WHERE layout_id = %s""",
            (layout_id,)
        )
        row = cur.fetchone()
        cur.close()
        conn.close()
        return row
    except Exception as e:
        print(f"❌ 数据库查询失败: {e}")
        return None

def layout_exists(layout_id):
    """检查户型图是否存在"""
    try:
        conn = get_db_connection()
        cur = conn.cursor()
        cur.execute("SELECT layout_id FROM layouts WHERE layout_id = %s", (layout_id,))
        exists = cur.fetchone() is not None
        cur.close()
        conn.close()
        return exists
    except Exception as e:
        print(f"❌ 数据库查询失败: {e}")
        return False

def save_plan(plan_id, layout_id, style, room_type, view_name, image_base64, description, total_budget):
    """保存装修方案到数据库"""
    try:
        conn = get_db_connection()
        cur = conn.cursor()
        cur.execute(
            """INSERT INTO renovation_plans (plan_id, layout_id, style, room_type, view_name, image_base64, description, total_budget)
               VALUES (%s, %s, %s, %s, %s, %s, %s, %s)""",
            (plan_id, layout_id, style, room_type, view_name, image_base64, description, total_budget)
        )
        conn.commit()
        cur.close()
        conn.close()
        print(f"✅ 方案已保存到数据库: {plan_id}")
        return True
    except Exception as e:
        print(f"❌ 方案保存失败: {e}")
        return False

async def async_save_plan(plan_id, layout_id, style, room_type, view_name, image_base64, description, total_budget):
    """异步保存方案到数据库（通过线程池执行）"""
    import asyncio
    loop = asyncio.get_event_loop()
    await loop.run_in_executor(
        None,
        save_plan,
        plan_id, layout_id, style, room_type, view_name, image_base64, description, total_budget
    )
