#!/usr/bin/env python3
"""Create initial admin user"""

import asyncio
import sys
import os

sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from sqlalchemy import text
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
from sqlalchemy.orm import sessionmaker
import bcrypt


ADMIN_PASSWORD_HASH = bcrypt.hashpw("admin123".encode(), bcrypt.gensalt()).decode()


async def create_admin():
    DATABASE_URL = os.environ.get(
        "DATABASE_URL", "postgresql+asyncpg://postgres:postgres@localhost:5432/planet_db"
    )
    engine = create_async_engine(DATABASE_URL, echo=False)
    async_session = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False)

    async with async_session() as session:
        result = await session.execute(text("SELECT id FROM users WHERE username = 'admin'"))
        if result.fetchone():
            print("Admin user already exists")
            return

        await session.execute(
            text("""
                INSERT INTO users (username, email, password_hash, role, is_active, created_at, updated_at)
                VALUES ('admin', 'admin@planet.local', :password, 'super_admin', true, NOW(), NOW())
            """),
            {"password": ADMIN_PASSWORD_HASH},
        )
        await session.commit()
        print(f"Admin user created: admin / admin123")
        print(f"Hash: {ADMIN_PASSWORD_HASH}")


if __name__ == "__main__":
    asyncio.run(create_admin())
