import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
import { environment } from '../../environments/environment';

@Injectable({
  providedIn: 'root'
})
export class UploadService {
  private apiUrl = `${environment.apiUrl}/api/upload`;

  constructor(private http: HttpClient) { }

  uploadImage(file: File): Observable<{url: string}> {
    const formData = new FormData();
    formData.append('file', file);
    
    return this.http.post<any>(this.apiUrl, formData);
  }
  
  /**
   * Subir una imagen en formato data URL directamente
   * @param dataUrl La imagen en formato data URL 
   * @param filename Nombre del archivo (opcional)
   */
  uploadImageFromDataUrl(dataUrl: string, filename: string = `image_${Date.now()}.jpg`): Observable<{url: string}> {
    // Convertir dataUrl a File
    const file = this.dataURLtoFile(dataUrl, filename);
    
    // Usar el método existente para subir el archivo
    return this.uploadImage(file);
  }
  
  /**
   * Convierte un Data URL a un objeto File
   */
  private dataURLtoFile(dataUrl: string, filename: string): File {
    const arr = dataUrl.split(',');
    const mime = arr[0].match(/:(.*?);/)![1];
    const bstr = atob(arr[1]);
    let n = bstr.length;
    const u8arr = new Uint8Array(n);
    
    while (n--) {
      u8arr[n] = bstr.charCodeAt(n);
    }
    
    return new File([u8arr], filename, { type: mime });
  }
}