import { databases } from '@/lib/appwrite';
import { Query } from 'appwrite';

const API_BASE_URL = '';

export interface ProdutoData {
  'preco-original': number;
  'preco-atual': number;
  'catalogo-produto-id': string;
  'empresa-id': string;
}

export interface ApiResponse<T = any> {
  success: boolean;
  data?: T;
  error?: string;
  details?: any;
}

export interface PaginatedResponse<T> extends ApiResponse<T> {
  documents: T[];
  total: number;
}

class ProdutoService {
  private async makeRequest<T>(endpoint: string, options: RequestInit = {}): Promise<ApiResponse<T>> {
    try {
      const response = await fetch(`${API_BASE_URL}${endpoint}`, {
        headers: {
          'Content-Type': 'application/json',
          ...(options.headers || {})
        },
        ...options
      });

      const data = await response.json();
      return data;
    } catch {
      return { success: false, error: 'Erro de conexão com o servidor' };
    }
  }

  async listar(page = 1, limit = 10): Promise<PaginatedResponse<any>> {
    try {
      const databaseId = process.env.NEXT_PUBLIC_APPWRITE_DATABASE_ID!;
      const collectionId = process.env.NEXT_PUBLIC_APPWRITE_COLLECTION_PRODUTOS_ID!;
      const offset = (page - 1) * limit;

      const response = await databases.listDocuments(databaseId, collectionId, [
        Query.limit(limit),
        Query.offset(offset)
      ]);

      return {
        success: true,
        documents: response.documents,
        total: response.total
      };
    } catch (error) {
      console.error('Erro ao listar produtos via SDK:', error);
      return { success: false, error: 'Erro ao carregar produtos', documents: [], total: 0 };
    }
  }

  async criar(data: ProdutoData): Promise<ApiResponse> {
    return this.makeRequest('/api/produtos', {
      method: 'POST',
      body: JSON.stringify({ documentId: 'unique()', data })
    });
  }

  async atualizar(id: string, data: ProdutoData): Promise<ApiResponse> {
    return this.makeRequest(`/api/produtos/${id}`, {
      method: 'PATCH',
      body: JSON.stringify({ data })
    });
  }

  async deletar(id: string): Promise<ApiResponse> {
    return this.makeRequest(`/api/produtos/${id}`, {
      method: 'DELETE'
    });
  }
}

export const produtoService = new ProdutoService();
