from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from pydantic import BaseModel, EmailStr
from typing import Optional, Literal
from datetime import datetime
from app.db.session import get_db
from app.api.deps import get_current_user
from app.db.models import User
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

router = APIRouter()


class FeedbackCreate(BaseModel):
    category: Literal['bug', 'feature', 'question', 'payment', 'integration', 'other']
    subject: str
    message: str
    channel: Literal['email', 'telegram', 'vk']
    contact_email: Optional[EmailStr] = None
    contact_telegram: Optional[str] = None
    contact_vk: Optional[str] = None
    timestamp: str


class FeedbackResponse(BaseModel):
    success: bool
    message: str
    ticket_id: Optional[str] = None


@router.post("", response_model=FeedbackResponse)
async def create_feedback(
    feedback: FeedbackCreate,
    current_user: User = Depends(get_current_user),
    db: Session = Depends(get_db)
):
    """
    Создание обращения в службу поддержки
    """
    
    # Генерируем уникальный ID обращения
    ticket_id = f"TKT-{datetime.now().strftime('%Y%m%d')}-{current_user.id}-{datetime.now().strftime('%H%M%S')}"
    
    # Определяем контактные данные
    contact_info = ""
    if feedback.channel == "email" and feedback.contact_email:
        contact_info = feedback.contact_email
    elif feedback.channel == "telegram" and feedback.contact_telegram:
        contact_info = feedback.contact_telegram
    elif feedback.channel == "vk" and feedback.contact_vk:
        contact_info = feedback.contact_vk
    
    # Формируем письмо для поддержки
    support_email = "support@company.com"  # Замените на реальный email
    
    # Категории на русском
    category_labels = {
        'bug': '🐛 Ошибка в работе',
        'feature': '💡 Предложение по улучшению',
        'question': '❓ Вопрос по использованию',
        'payment': '💳 Вопрос по оплате',
        'integration': '🔌 Помощь с интеграцией',
        'other': '📝 Другое'
    }
    
    # HTML письмо
    html_content = f"""
    <html>
    <body style="font-family: Arial, sans-serif; line-height: 1.6; color: #333;">
        <div style="max-width: 600px; margin: 0 auto; padding: 20px;">
            <h2 style="color: #1890ff;">Новое обращение в службу поддержки</h2>
            
            <div style="background: #f5f5f5; padding: 15px; border-radius: 5px; margin: 20px 0;">
                <p><strong>Ticket ID:</strong> {ticket_id}</p>
                <p><strong>Категория:</strong> {category_labels.get(feedback.category, feedback.category)}</p>
                <p><strong>Дата:</strong> {feedback.timestamp}</p>
            </div>
            
            <div style="margin: 20px 0;">
                <h3>Информация о пользователе:</h3>
                <p><strong>Email:</strong> {current_user.email}</p>
                <p><strong>Tenant:</strong> {current_user.tenant_id}</p>
                <p><strong>Канал связи:</strong> {feedback.channel.upper()}</p>
                <p><strong>Контакт:</strong> {contact_info}</p>
            </div>
            
            <div style="margin: 20px 0;">
                <h3>Тема обращения:</h3>
                <p style="font-size: 16px;"><strong>{feedback.subject}</strong></p>
            </div>
            
            <div style="margin: 20px 0;">
                <h3>Сообщение:</h3>
                <div style="background: white; padding: 15px; border-left: 3px solid #1890ff;">
                    {feedback.message.replace(chr(10), '<br>')}
                </div>
            </div>
            
            <hr style="margin: 30px 0; border: none; border-top: 1px solid #ddd;">
            
            <p style="color: #666; font-size: 12px;">
                Это автоматическое сообщение от системы уведомлений.<br>
                Пожалуйста, ответьте пользователю через указанный канал связи в течение 24 часов.
            </p>
        </div>
    </body>
    </html>
    """
    
    # Текстовая версия
    text_content = f"""
Новое обращение в службу поддержки

Ticket ID: {ticket_id}
Категория: {category_labels.get(feedback.category, feedback.category)}
Дата: {feedback.timestamp}

Информация о пользователе:
Email: {current_user.email}
Tenant: {current_user.tenant_id}
Канал связи: {feedback.channel.upper()}
Контакт: {contact_info}

Тема: {feedback.subject}

Сообщение:
{feedback.message}

---
Это автоматическое сообщение от системы уведомлений.
Пожалуйста, ответьте пользователю через указанный канал связи в течение 24 часов.
    """
    
    try:
        # Отправка email (в production использовать настоящий SMTP)
        # Здесь можно интегрировать с реальным SMTP сервером
        # или использовать Celery task для асинхронной отправки
        
        # Для демонстрации - просто логируем
        print(f"📧 New feedback ticket: {ticket_id}")
        print(f"Category: {feedback.category}")
        print(f"Channel: {feedback.channel}")
        print(f"Contact: {contact_info}")
        print(f"Subject: {feedback.subject}")
        print(f"Message: {feedback.message[:100]}...")
        
        # В production раскомментировать:
        # await send_email_async(
        #     to=support_email,
        #     subject=f"[{ticket_id}] {feedback.subject}",
        #     html_content=html_content,
        #     text_content=text_content
        # )
        
        # Также можно сохранить в базу данных для истории
        # feedback_record = Feedback(
        #     ticket_id=ticket_id,
        #     user_id=current_user.id,
        #     tenant_id=current_user.tenant_id,
        #     category=feedback.category,
        #     subject=feedback.subject,
        #     message=feedback.message,
        #     channel=feedback.channel,
        #     contact_info=contact_info,
        #     status='new',
        #     created_at=datetime.now()
        # )
        # db.add(feedback_record)
        # db.commit()
        
        return FeedbackResponse(
            success=True,
            message="Спасибо за обратную связь! Мы свяжемся с вами в ближайшее время.",
            ticket_id=ticket_id
        )
        
    except Exception as e:
        print(f"Error sending feedback: {e}")
        raise HTTPException(
            status_code=500,
            detail="Ошибка при отправке сообщения. Пожалуйста, попробуйте позже или напишите напрямую на support@company.com"
        )


@router.get("/tickets")
async def get_user_tickets(
    current_user: User = Depends(get_current_user),
    db: Session = Depends(get_db)
):
    """
    Получить список обращений текущего пользователя
    """
    # В production вернуть реальные данные из БД
    return {
        "tickets": [],
        "message": "История обращений пока пуста"
    }

