from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.ext.asyncio import AsyncSession from app.db.session import get_db from app.api.deps import get_current_active_user from app.models.user import User from app.models.ai_conversation import AIConversation from app.schemas.ai import ( ChatRequest, ChatResponse, ScheduleGenerateRequest, ScheduleGenerateResponse, ConversationHistory, ConversationListItem, ScheduleUpdateRequest, ScheduleUpdateResponse, RecommendationRequest, RecommendationResponse, ) from app.services.chat_service import chat_service from app.services.schedule_generator import schedule_generator from app.services.cache_service import cache_service from app.services.gigachat_service import gigachat_service from app.crud import schedule as crud_schedule, task as crud_task from app.schemas.task import TaskCreate from app.schemas.schedule import ScheduleUpdate from app.core.config import settings router = APIRouter() @router.post("/chat", response_model=ChatResponse) async def chat_with_ai( request: ChatRequest, current_user: User = Depends(get_current_active_user), db: AsyncSession = Depends(get_db) ): """Чат с ИИ-агентом 'Планета Земля'""" try: response = await chat_service.chat( db=db, user_id=current_user.id, request=request ) return response except Exception as e: raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=f"Chat error: {str(e)}" ) @router.post("/schedule/generate", response_model=ScheduleGenerateResponse) async def generate_schedule_ai( request: ScheduleGenerateRequest, current_user: User = Depends(get_current_active_user), db: AsyncSession = Depends(get_db) ): """Сгенерировать расписание через ИИ""" try: result = await schedule_generator.generate( db=db, user_id=current_user.id, child_age=request.child_age, preferences=request.preferences, schedule_date=request.date, description=request.description ) return ScheduleGenerateResponse( schedule_id=result["schedule_id"], title=result["title"], tasks=result["tasks"] ) except Exception as e: raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=f"Failed to generate schedule: {str(e)}" )