import type { APIContext } from 'astro';
import { authService } from '@/lib/authService';

export async function POST({ request }: APIContext) {
  try {
    // Создаем клиент PocketBase для текущего запроса
    const pb = authService.createClientFromRequest(request);

    // Проверяем аутентификацию пользователя
    const user = await authService.validateAndRefreshSession(pb);

    if (!user) {
      return new Response(
        JSON.stringify({
          error: 'Для отправки сообщения необходимо войти в аккаунт'
        }),
        {
          status: 401,
          headers: { 'Content-Type': 'application/json' }
        }
      );
    }

    // Получаем данные формы
    const body = await request.json();
    const { name, email, message } = body;

    // Валидация данных
    if (!name || !email || !message) {
      return new Response(
        JSON.stringify({
          error: 'Все поля обязательны для заполнения'
        }),
        {
          status: 400,
          headers: { 'Content-Type': 'application/json' }
        }
      );
    }

    // Дополнительная валидация
    if (typeof name !== 'string' || typeof email !== 'string' || typeof message !== 'string') {
      return new Response(
        JSON.stringify({
          error: 'Неверный формат данных'
        }),
        {
          status: 400,
          headers: { 'Content-Type': 'application/json' }
        }
      );
    }

    if (name.length < 2 || name.length > 100) {
      return new Response(
        JSON.stringify({
          error: 'Имя должно быть длиной от 2 до 100 символов'
        }),
        {
          status: 400,
          headers: { 'Content-Type': 'application/json' }
        }
      );
    }

    if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) {
      return new Response(
        JSON.stringify({
          error: 'Неверный формат email'
        }),
        {
          status: 400,
          headers: { 'Content-Type': 'application/json' }
        }
      );
    }

    if (message.length < 10 || message.length > 500) {
      return new Response(
        JSON.stringify({
          error: 'Сообщение должно быть длиной от 10 до 500 символов'
        }),
        {
          status: 400,
          headers: { 'Content-Type': 'application/json' }
        }
      );
    }

    // Здесь можно добавить сохранение сообщения в базу данных
    // Пока просто возвращаем успешный ответ
    
    // Также можно отправить уведомление администратору
    // await pb.collection('messages').create({
    //   name: name,
    //   email: email,
    //   message: message,
    //   userId: user.id, // Связываем с пользователем
    //   status: 'new'
    // });

    // Отправка уведомления администратору (если настроено)
    try {
      await fetch('/api/auth/send-admin-notification', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({
          subject: 'Новое сообщение через форму обратной связи',
          message: `Получено новое сообщение от ${name} (${email}): \n\n${message}`
        })
      });
    } catch (notificationError) {
      console.error('Ошибка при отправке уведомления:', notificationError);
    }

    const responseHeaders: Record<string, string> = {
      'Content-Type': 'application/json'
    };

    // Добавляем заголовки с обновленными куки
    const authHeaders = authService.createAuthHeaders(pb);
    Object.entries(authHeaders).forEach(([key, value]) => {
      responseHeaders[key] = value;
    });

    const response = new Response(
      JSON.stringify({
        message: 'Ваше сообщение успешно отправлено!'
      }),
      {
        status: 200,
        headers: responseHeaders
      }
    );

    return response;
  } catch (error) {
    console.error('Ошибка при обработке контактной формы:', error);

    return new Response(
      JSON.stringify({
        error: 'Ошибка при отправке сообщения'
      }),
      {
        status: 500,
        headers: { 'Content-Type': 'application/json' }
      }
    );
  }
}