from fastapi import FastAPI, Request, HTTPException
from fastapi.responses import HTMLResponse, FileResponse, JSONResponse
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
from pydantic import BaseModel, EmailStr
from aiogram import Bot, Dispatcher
from fastapi.middleware.wsgi import WSGIMiddleware
import uvicorn

BOT_TOKEN = '7102060229:AAE4SWmgKXkCBC482l8Ble5lKzlCV2YIWnM'
ID = '340394898'

bot = Bot(  # Образ Бота
        token=BOT_TOKEN,
    )

app = FastAPI()

# Для совместимости с WSGI
application = WSGIMiddleware(app)

# Монтирование статических файлов
app.mount("/static", StaticFiles(directory="static"), name="static")

# Инициализация шаблонов
templates = Jinja2Templates(directory="templates")

@app.get("/", response_class=HTMLResponse)
async def read_index(request: Request):
    return templates.TemplateResponse("index.html", {"request": request})

@app.get("/catalog", response_class=HTMLResponse)
async def read_catalog(request: Request):
    return templates.TemplateResponse("catalog.html", {"request": request})

@app.get("/about", response_class=HTMLResponse)
async def read_about(request: Request):
    return templates.TemplateResponse("about.html", {"request": request})

@app.get("/contacts", response_class=HTMLResponse)
async def read_contacts(request: Request):
    return templates.TemplateResponse("contacts.html", {"request": request})

# Дополнительные маршруты для подразделов каталога
@app.get("/catalog/{filter_type}", response_class=HTMLResponse)
async def read_filter_type(request: Request, filter_type: str):
    # Здесь вы можете добавить логику для загрузки конкретных данных о типе фильтра
    return templates.TemplateResponse(f"catalog_{filter_type}.html", {"request": request, "filter_type": filter_type})

@app.get("/certificates", response_class=HTMLResponse)
async def read_certificates(request: Request):
    certificates = [
        {
            "title": "Сертификат соответствия",
            "description": "Сертификат соответствия",
            "image": "/static/img/certificates/сертификат1.png"
        },
        {
            "title": "Приложение",
            "description": "Приложение сертификата соответствия",
            "image": "/static/img/certificates/сертификат2.png"
        },
        {
            "title": "Приложение",
            "description": "Приложение сертификата соответствия",
            "image": "/static/img/certificates/сертификат3.png"
        },
        {
            "title": "Приложение",
            "description": "Приложение сертификата соответствия",
            "image": "/static/img/certificates/сертификат4.png"
        },
        # Add more certificates as needed
    ]
    return templates.TemplateResponse("certificates.html", {"request": request, "certificates": certificates})

class ContactForm(BaseModel):
    name: str
    email: EmailStr
    message: str

@app.post("/submit-form")
async def submit_form(form_data: ContactForm):
    try:
        # Здесь вы можете добавить логику для сохранения данных в базу данных
        # или отправки электронного письма
        await send_email(form_data)
        return JSONResponse(content={"message": "Form submitted successfully"}, status_code=200)
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

async def send_email(form_data: ContactForm):
    
    body = f"""
Сообщение от wanlanda
Имя: {form_data.name}
Email: {form_data.email}
Сообщение:
{form_data.message}
    """
    print(body)
    se = await bot.send_message(
            ID,
            body,
        )
    print(se)

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=20001)