# --- START OF FILE database.py ---

import asyncio
import json
from datetime import datetime # <-- Добавили datetime
from sqlalchemy import create_engine, Column, Integer, String, JSON, DateTime, Text, Enum
from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker
from sqlalchemy.orm import declarative_base
import enum # <-- Добавили enum

# 1. Настройка подключения к базе данных
DATABASE_URL = "sqlite+aiosqlite:///agents.db"
engine = create_async_engine(DATABASE_URL)
async_session = async_sessionmaker(engine, expire_on_commit=False)

Base = declarative_base()

# 2. Описание таблицы "agents" (без изменений)
class Agent(Base):
    __tablename__ = "agents"
    id = Column(Integer, primary_key=True, index=True)
    name = Column(String, unique=True, index=True, nullable=False)
    model = Column(String, nullable=False)
    voice = Column(String, nullable=False)
    instructions = Column(String, nullable=False)
    turn_detection_settings = Column(JSON, nullable=False)

# 3. !!! НОВАЯ ТАБЛИЦА: История звонков !!!
class CallStatus(enum.Enum):
    INITIATED = "initiated"
    COMPLETED = "completed"
    FAILED = "failed"

class CallSession(Base):
    __tablename__ = "call_sessions"
    id = Column(Integer, primary_key=True, index=True)
    session_id_openai = Column(String, index=True) # ID сессии от OpenAI
    agent_name = Column(String, index=True)
    start_time = Column(DateTime, default=datetime.utcnow)
    end_time = Column(DateTime, nullable=True)
    status = Column(Enum(CallStatus), default=CallStatus.INITIATED)
    transcript = Column(Text, nullable=True) # Здесь будет храниться расшифровка
    combined_audio_path = Column(String, nullable=True)


# 4. Функция для инициализации БД
async def init_db():
    async with engine.begin() as conn:
        # Создаем таблицу в БД, если ее еще нет
        await conn.run_sync(Base.metadata.create_all)

    async with async_session() as session:
        # Проверяем, есть ли уже агент "default"
        from sqlalchemy.future import select
        result = await session.execute(select(Agent).where(Agent.name == "default"))
        if result.scalar_one_or_none() is None:
            print("База данных пуста. Создаем агентов по умолчанию...")
            # Если агентов нет, создаем их (данные взяты из вашего старого config.json)
            default_agent = Agent(
                name="default",
                model="gpt-4o-realtime-preview",
                voice="marin",
                instructions="Ты дружелюбный русскоязычный ассистент. Отвечай кратко и по делу.",
                turn_detection_settings={
                    "type": "server_vad",
                    "threshold": 0.5,
                    "prefix_padding_ms": 300,
                    "silence_duration_ms": 600,
                    "create_response": True
                }
            )
            sales_agent = Agent(
                name="sales",
                model="gpt-4o-realtime-preview",
                voice="alloy",
                instructions="Ты менеджер по продажам. Выясни потребности клиента и предложи товар.",
                turn_detection_settings={
                    "type": "server_vad",
                    "threshold": 0.6,
                    "prefix_padding_ms": 300,
                    "silence_duration_ms": 800,
                    "create_response": True
                }
            )
            session.add_all([default_agent, sales_agent])
            await session.commit()
            print("Агенты 'default' и 'sales' созданы.")
        else:
            print("База данных уже инициализирована.")

# --- END OF FILE database.py ---