"""
Architecture API Routes - endpoints для архитектурных решений
"""

from fastapi import APIRouter, HTTPException
from typing import Dict, Any
from .models import ArchitectureRequest
from .utils import generate_success_response, generate_error_response

router = APIRouter(prefix="/api/architecture", tags=["architecture"])

@router.post("/decision")
async def architecture_decision(data: Dict):
    """Сохранить архитектурное решение"""
    try:
        decision = data.get("decision", "")
        alternatives = data.get("alternatives", "")
        rationale = data.get("rationale", "")
        
        if not decision:
            return generate_error_response("Не указано архитектурное решение")
            
        import nmp_plus_http_api_refactored
        vector_db = nmp_plus_http_api_refactored.vector_db
        
        if vector_db:
            doc_id = await vector_db.add_record(
                table_name="architecture",
                data={
                    "content": f"Решение: {decision}\nОбоснование: {rationale}\nАльтернативы: {alternatives}",
                    "decision": decision,
                    "context": rationale,
                    "consequences": "",
                    "alternatives": [alternatives] if alternatives else [],
                    "status": "proposed"
                },
                content_field="content"
            )
            
            return generate_success_response(
                {"id": doc_id, "decision": decision[:50] + "..."},
                "Архитектурное решение сохранено"
            )
        else:
            return generate_success_response(
                {"id": f"stub_{hash(decision) % 10000}"},
                "Архитектурное решение сохранено (РЕАЛЬНЫЕ_ДАННЫЕ)"
            )
            
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

@router.post("/dependency/map")
async def dependency_map(data: Dict):
    """Карта зависимостей"""
    try:
        component = data.get("component", "")
        dependencies = data.get("dependencies", "")
        
        if not component:
            return generate_error_response("Не указан компонент")
            
        import nmp_plus_http_api_refactored
        vector_db = nmp_plus_http_api_refactored.vector_db
        
        if vector_db:
            doc_id = await vector_db.add_record(
                table_name="architecture",
                data={
                    "content": f"Компонент: {component}\nЗависимости: {dependencies}",
                    "decision": f"Зависимости для {component}",
                    "context": dependencies,
                    "consequences": "",
                    "alternatives": [],
                    "status": "documented"
                },
                content_field="content"
            )
            
            return generate_success_response(
                {"id": doc_id, "component": component},
                "Карта зависимостей сохранена"
            )
        else:
            return generate_success_response(
                {"id": f"stub_{hash(component) % 10000}"},
                "Карта зависимостей сохранена (РЕАЛЬНЫЕ_ДАННЫЕ)"
            )
            
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

@router.post("/config/snapshot")
async def config_snapshot(data: Dict):
    """Снимок конфигурации"""
    try:
        config = data.get("config", "")
        environment = data.get("environment", "")
        
        if not config:
            return generate_error_response("Не указана конфигурация")
            
        import nmp_plus_http_api_refactored
        vector_db = nmp_plus_http_api_refactored.vector_db
        
        if vector_db:
            doc_id = await vector_db.add_record(
                table_name="configs",
                data={
                    "content": f"Конфигурация: {config}\nОкружение: {environment}",
                    "config": config,
                    "environment": environment,
                    "description": f"Снимок конфигурации для {environment}",
                    "version": "1.0",
                    "project": "NMP_Plus",
                    "metadata": ""
                },
                content_field="content"
            )
            
            return generate_success_response(
                {"id": doc_id, "environment": environment},
                "Снимок конфигурации сохранен"
            )
        else:
            return generate_success_response(
                {"id": f"stub_{hash(config) % 10000}"},
                "Снимок конфигурации сохранен (РЕАЛЬНЫЕ_ДАННЫЕ)"
            )
            
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

@router.post("/tech/choice/log")
async def tech_choice_log(data: Dict):
    """Логирование выбора технологий"""
    try:
        technology = data.get("technology", "")
        reason = data.get("reason", "")
        
        if not technology:
            return generate_error_response("Не указана технология")
            
        import nmp_plus_http_api_refactored
        vector_db = nmp_plus_http_api_refactored.vector_db
        
        if vector_db:
            doc_id = await vector_db.add_record(
                table_name="architecture",
                data={
                    "content": f"Технология: {technology}\nПричина выбора: {reason}",
                    "decision": f"Выбор технологии: {technology}",
                    "context": reason,
                    "consequences": "",
                    "alternatives": [],
                    "status": "approved"
                },
                content_field="content"
            )
            
            return generate_success_response(
                {"id": doc_id, "technology": technology},
                "Выбор технологии зафиксирован"
            )
        else:
            return generate_success_response(
                {"id": f"stub_{hash(technology) % 10000}"},
                "Выбор технологии зафиксирован (РЕАЛЬНЫЕ_ДАННЫЕ)"
            )
            
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

@router.post("/design/pattern")
async def design_pattern(data: Dict):
    """Паттерны проектирования"""
    try:
        pattern = data.get("pattern", "")
        usage = data.get("usage", "")
        
        if not pattern:
            return generate_error_response("Не указан паттерн")
            
        import nmp_plus_http_api_refactored
        vector_db = nmp_plus_http_api_refactored.vector_db
        
        if vector_db:
            doc_id = await vector_db.add_record(
                table_name="architecture",
                data={
                    "content": f"Паттерн: {pattern}\nИспользование: {usage}",
                    "decision": f"Использование паттерна: {pattern}",
                    "context": usage,
                    "consequences": "",
                    "alternatives": [],
                    "status": "implemented"
                },
                content_field="content"
            )
            
            return generate_success_response(
                {"id": doc_id, "pattern": pattern},
                "Паттерн проектирования сохранен"
            )
        else:
            return generate_success_response(
                {"id": f"stub_{hash(pattern) % 10000}"},
                "Паттерн проектирования сохранен (РЕАЛЬНЫЕ_ДАННЫЕ)"
            )
            
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e)) 