import asyncio
from sqlmodel import select
from sqlmodel.ext.asyncio.session import AsyncSession
from app.core.db import async_engine
from app.models.models import Topic, Quiz, Question, User
from app.core.security import get_password_hash

apis_basic_data = {
  "id": "apis",
  "name": "APIs Basic",
  "icon": "🔌",
  "questions": [
    {
      "question": "What is the primary purpose of an API?",
      "choices": [
        "To allow different software systems to communicate with each other",
        "To render user interfaces in the browser",
        "To store data permanently on a database server",
        "To compile code into machine language"
      ],
      "answer": 0,
      "difficulty": "Easy",
      "topic": "APIs",
      "subTopic": "Concepts"
    },
    {
      "question": "In a RESTful API, what does a resource typically represent?",
      "choices": [
        "A specific URL path only",
        "A conceptual entity such as a user or order",
        "A single HTTP method like GET or POST",
        "A database table name only"
      ],
      "answer": 1,
      "difficulty": "Easy",
      "topic": "APIs",
      "subTopic": "REST"
    },
     {
      "question": "Which format is most commonly used for REST API payloads today?",
      "choices": [
        "XML documents",
        "Plain text files",
        "JSON objects",
        "Binary executables"
      ],
      "answer": 2,
      "difficulty": "Easy",
      "topic": "APIs",
      "subTopic": "Data Formats"
    }
  ]
}

async def seed_data():
    async with AsyncSession(async_engine) as session:
        # Create Topic
        topic = await session.get(Topic, "apis")
        if not topic:
            topic = Topic(id="apis", name="APIs", icon="fluent-color:wifi-24")
            session.add(topic)
            await session.commit()
            print("Created Topic: APIs")
            
        # Create Quiz
        quiz_id = "apis-basic"
        quiz = await session.get(Quiz, quiz_id)
        if not quiz:
            quiz = Quiz(id=quiz_id, name="APIs Basic", topic_id="apis")
            session.add(quiz)
            await session.commit()
            print("Created Quiz: APIs Basic")
            
        # Create Questions
        for q_data in apis_basic_data["questions"]:
            stmt = select(Question).where(Question.content == q_data["question"]).where(Question.quiz_id == quiz_id)
            result = await session.exec(stmt)
            existing = result.first()
            if not existing:
                question = Question(
                    content=q_data["question"],
                    options=q_data["choices"],
                    answer=q_data["answer"],
                    difficulty=q_data["difficulty"],
                    sub_topic=q_data["subTopic"],
                    quiz_id=quiz_id
                )
                session.add(question)
        
        # Create Admin User
        result = await session.exec(select(User).where(User.username == "admin"))
        admin_user = result.first()
        if not admin_user:
            user = User(username="admin", password_hash=get_password_hash("admin123"))
            session.add(user)
            print("Created User: admin / admin123")
            
        await session.commit()
        print("Seeding Complete")

if __name__ == "__main__":
    asyncio.run(seed_data())
