export const runtime = 'edge';

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

// Tipos para a Etapa 2 - produtos-venda
interface VendaPayload {
  // Campos obrigatórios
  catalogo_id: string;
  data_validade: string; // YYYY-MM-DD
  preco_venda: number;
  observacoes: 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_VENDA_ID!;
const API_KEY = process.env.APPWRITE_API_KEY!;

async function createDocument(data: VendaPayload) {
  const url = `${APPWRITE_ENDPOINT}/databases/${DATABASE_ID}/collections/${COLLECTION_ID}/documents`;
  
  // Gerar ID único
  const uniqueId = `venda_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
  
  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({
      documentId: uniqueId,
      data: data
    })
  });

  if (!response.ok) {
    const errorData = await response.json();
    throw new Error(`Appwrite API Error: ${errorData.message || response.statusText}`);
  }

  return await response.json();
}

function validateRequiredFields(data: any): string[] {
  const errors: string[] = [];
  
  if (!data.catalogo_id || typeof data.catalogo_id !== 'string') {
    errors.push('catalogo_id é obrigatório e deve ser uma string');
  }
  
  if (!data.data_validade || typeof data.data_validade !== 'string') {
    errors.push('data_validade é obrigatório e deve ser uma string no formato YYYY-MM-DD');
  } else {
    // Validar formato da data
    const dateRegex = /^\d{4}-\d{2}-\d{2}$/;
    if (!dateRegex.test(data.data_validade)) {
      errors.push('data_validade deve estar no formato YYYY-MM-DD');
    }
  }
  
  if (data.preco_venda === undefined || data.preco_venda === null || typeof data.preco_venda !== 'number') {
    errors.push('preco_venda é obrigatório e deve ser um número');
  } else if (data.preco_venda < 0) {
    errors.push('preco_venda deve ser um número positivo');
  }
  
  if (!data.observacoes || typeof data.observacoes !== 'string') {
    errors.push('observacoes é 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: 2,
        error: 'Campos obrigatórios ausentes ou inválidos',
        details: validationErrors
      } as ApiResponse, { status: 400 });
    }

    // Preparar dados para o Appwrite
    const vendaData: VendaPayload = {
      catalogo_id: body.catalogo_id,
      data_validade: body.data_validade,
      preco_venda: body.preco_venda,
      observacoes: body.observacoes,
    };

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

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

  } catch (error: any) {
    console.error('Erro na Etapa 2 - Venda:', error);
    
    return NextResponse.json({
      success: false,
      etapa: 2,
      error: 'Erro interno do servidor ao criar produto de venda',
      details: error.message
    } as ApiResponse, { status: 500 });
  }
}