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

export const prerender = false;

export async function POST({ request }: APIContext) {
  try {
    const formData = await request.formData();
    const name = formData.get('name');
    const email = formData.get('email');
    const password = formData.get('password');
    const passwordConfirm = formData.get('confirmPassword');

    if (!name || !email || !password || !passwordConfirm) {
      // Перенаправляем на страницу регистрации с параметрами ошибки
      return new Response(null, {
        status: 302,
        headers: {
          "Location": "/auth/register?error=" + encodeURIComponent("Все поля обязательны для заполнения")
        }
      });
    }

    // Проверяем, что пароли совпадают
    if (password !== passwordConfirm) {
      // Перенаправляем на страницу регистрации с параметрами ошибки
      return new Response(null, {
        status: 302,
        headers: {
          "Location": "/auth/register?error=" + encodeURIComponent("Пароли не совпадают")
        }
      });
    }

    const pb = authService.createClientFromRequest(request);

    // Создаем пользователя
    const userData = await pb.collection("users").create({
      name: String(name),
      email: String(email),
      password: String(password),
      passwordConfirm: String(passwordConfirm),
      emailVisibility: true,
    });

    // Отправляем письмо для подтверждения email
    await pb.collection("users").requestVerification(String(email));

    // Перенаправляем на страницу входа с сообщением о необходимости подтверждения email
    return new Response(null, {
      status: 302,
      headers: {
        "Location": "/auth/login?success=" + encodeURIComponent("Vielen Dank für Ihre Registrierung! Bitte bestätigen Sie Ihre E-Mail-Adresse, um Ihr Konto zu aktivieren. Ein Bestätigungslink wurde an Ihre E-Mail-Adresse gesendet.")
      }
    });
  } catch (error: unknown) {
    console.error('Ошибка при регистрации:', error);

    let message = 'Ошибка при регистрации';

    if (error && typeof error === 'object' && 'data' in error && error.data && typeof error.data === 'object' && 'data' in error.data) {
      // Обработка ошибок от PocketBase
      const apiError = error.data.data;
      if (apiError && typeof apiError === 'object') {
        message = Object.values(apiError).map((err: unknown) => {
          if (err && typeof err === 'object' && 'message' in err) {
            return (err.message as string);
          }
          return 'Неизвестная ошибка';
        }).join(', ');
      }
    } else if (error && typeof error === 'object' && 'message' in error) {
      message = (error.message as string);
    }

    // Перенаправляем на страницу регистрации с параметрами ошибки
    return new Response(null, {
      status: 302,
      headers: {
        "Location": "/auth/register?error=" + encodeURIComponent(message)
      }
    });
  }
}