export const runtime = 'edge';

import { NextRequest, NextResponse } from 'next/server';

// Tipos para a Etapa 1 - produtos-catalogo
interface CatalogoPayload {
  // Campos obrigatórios
  codigo_ean: string;
  codigo_interno: string;
  nome: string;
  descricao: string;
  preco_base: number;
  laboratorio: string;
  categoria: string;
  subcategoria: string;
}

interface ApiResponse {
  success: boolean;
  etapa: number;
  data?: any;
  error?: string;
  details?: any;
}

// Configuração do Appwrite
const APPWRITE_ENDPOINT = process.env.NEXT_PUBLIC_APPWRITE_ENDPOINT!;
const PROJECT_ID = process.env.NEXT_PUBLIC_APPWRITE_PROJECT_ID!;
const DATABASE_ID = process.env.NEXT_PUBLIC_APPWRITE_DATABASE_ID!;
const COLLECTION_ID = process.env.NEXT_PUBLIC_APPWRITE_COLLECTION_PRODUTOS_CATALOGO_ID!;
const API_KEY = process.env.APPWRITE_API_KEY!;

async function createDocument(data: CatalogoPayload) {
  const url = `${APPWRITE_ENDPOINT}/databases/${DATABASE_ID}/collections/${COLLECTION_ID}/documents`;
  
  // Gerar ID único
  const uniqueId = `catalogo_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
  
  const requestBody = {
    documentId: uniqueId,
    data: data
  };
  
  const response = await fetch(url, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'X-Appwrite-Project': PROJECT_ID,
      'X-Appwrite-Key': API_KEY,
    },
    body: JSON.stringify(requestBody)
  });

  if (!response.ok) {
    const errorData = await response.json();
    console.error('❌ Erro do Appwrite:', errorData);
    throw new Error(`Appwrite error: ${response.status} - ${JSON.stringify(errorData)}`);
  }

  const result = await response.json();
  return result;
}

function validateRequiredFields(data: any): string[] {
  const errors: string[] = [];
  
  if (!data.codigo_ean || typeof data.codigo_ean !== 'string') {
    errors.push('codigo_ean é obrigatório e deve ser uma string');
  }
  
  if (!data.codigo_interno || typeof data.codigo_interno !== 'string') {
    errors.push('codigo_interno é obrigatório e deve ser uma string');
  }
  
  if (!data.nome || typeof data.nome !== 'string') {
    errors.push('nome é obrigatório e deve ser uma string');
  }
  
  if (!data.descricao || typeof data.descricao !== 'string') {
    errors.push('descricao é obrigatório e deve ser uma string');
  }
  
  if (data.preco_base === undefined || data.preco_base === null || typeof data.preco_base !== 'number') {
    errors.push('preco_base é obrigatório e deve ser um número');
  }
  
  if (!data.laboratorio || typeof data.laboratorio !== 'string') {
    errors.push('laboratorio é obrigatório e deve ser uma string');
  }
  
  if (!data.categoria || typeof data.categoria !== 'string') {
    errors.push('categoria é obrigatório e deve ser uma string');
  }
  
  if (!data.subcategoria || typeof data.subcategoria !== 'string') {
    errors.push('subcategoria é obrigatório e deve ser uma string');
  }
  
  return errors;
}

export async function POST(request: NextRequest) {
  try {
    const body = await request.json();
    
    // Validar campos obrigatórios
    const validationErrors = validateRequiredFields(body);
    
    if (validationErrors.length > 0) {
      return NextResponse.json({
        success: false,
        etapa: 1,
        error: 'Campos obrigatórios ausentes ou inválidos',
        details: validationErrors
      } as ApiResponse, { status: 400 });
    }

    // Preparar dados para o Appwrite
    const catalogoData: CatalogoPayload = {
      codigo_ean: body.codigo_ean,
      codigo_interno: body.codigo_interno,
      nome: body.nome,
      descricao: body.descricao,
      preco_base: body.preco_base,
      laboratorio: body.laboratorio,
      categoria: body.categoria,
      subcategoria: body.subcategoria,
    };

    // Criar documento no Appwrite
    const result = await createDocument(catalogoData);

    return NextResponse.json({
      success: true,
      etapa: 1,
      data: {
        id: result.$id,
        ...result
      }
    } as ApiResponse);

  } catch (error: any) {
    console.error('Erro na Etapa 1 - Catálogo:', error);
    
    return NextResponse.json({
      success: false,
      etapa: 1,
      error: 'Erro interno do servidor ao criar produto no catálogo',
      details: error.message
    } as ApiResponse, { status: 500 });
  }
}