#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
import sqlite3
from datetime import datetime
import sys
import importlib.util

# Add the parent directory to path so we can import the app
parent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, parent_dir)

from app import app, db_path
from models import db

def ensure_db_dir():
    """Make sure the database directory exists."""
    os.makedirs(os.path.dirname(db_path), exist_ok=True)

def fix_database_schema():
    """Fix the database schema by adding missing columns."""
    with app.app_context():
        # Ensure directory exists
        ensure_db_dir()
        
        # Check if database exists, create tables if needed
        if not os.path.exists(db_path):
            print("Database doesn't exist. Creating all tables from scratch...")
            db.create_all()
            print("Database tables created successfully!")
            return
        
        # Connect to existing database
        print(f"Connecting to database: {db_path}")
        conn = sqlite3.connect(db_path)
        cursor = conn.cursor()
        
        # Check if User table exists
        cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='user'")
        if not cursor.fetchone():
            print("User table doesn't exist. Creating all tables from scratch...")
            conn.close()
            db.create_all()
            print("Database tables created successfully!")
            return
        
        # Check existing columns
        cursor.execute("PRAGMA table_info(user)")
        columns = cursor.fetchall()
        column_names = [col[1] for col in columns]
        print("Existing columns in User table:", column_names)
        
        # Add missing columns
        if 'created_at' not in column_names:
            print("Adding 'created_at' column to User table...")
            cursor.execute("ALTER TABLE user ADD COLUMN created_at TIMESTAMP")
        
        if 'last_login' not in column_names:
            print("Adding 'last_login' column to User table...")
            cursor.execute("ALTER TABLE user ADD COLUMN last_login TIMESTAMP")
        
        if 'avatar' not in column_names:
            print("Adding 'avatar' column to User table...")
            cursor.execute("ALTER TABLE user ADD COLUMN avatar VARCHAR(200)")
        
        if 'bio' not in column_names:
            print("Adding 'bio' column to User table...")
            cursor.execute("ALTER TABLE user ADD COLUMN bio TEXT")
        
        # Commit the changes
        conn.commit()
        conn.close()
        print("Database schema updated successfully!")
        return True

if __name__ == "__main__":
    fix_database_schema() 