/**
 * ریسایز تصویر به استاندارد شبکه‌های اجتماعی
 * - حداکثر عرض: 1080px
 * - حداکثر ارتفاع: 1080px
 * - کیفیت: 0.85
 */

export interface ResizeImageOptions {
  maxWidth?: number;
  maxHeight?: number;
  quality?: number;
}

export const resizeImage = (
  file: File,
  options: ResizeImageOptions = {}
): Promise<File> => {
  const {
    maxWidth = 1080,
    maxHeight = 1080,
    quality = 0.85,
  } = options;

  return new Promise((resolve, reject) => {
    const reader = new FileReader();

    reader.onload = (e) => {
      const img = new Image();

      img.onload = () => {
        // محاسبه ابعاد جدید با حفظ نسبت تصویر
        let width = img.width;
        let height = img.height;

        // اگر تصویر از حد مجاز بزرگتر است، ریسایز کنیم
        if (width > maxWidth || height > maxHeight) {
          const ratio = Math.min(maxWidth / width, maxHeight / height);
          width = Math.round(width * ratio);
          height = Math.round(height * ratio);
        }

        // ایجاد canvas برای ریسایز
        const canvas = document.createElement('canvas');
        canvas.width = width;
        canvas.height = height;

        const ctx = canvas.getContext('2d');
        if (!ctx) {
          reject(new Error('Cannot get canvas context'));
          return;
        }

        // رسم تصویر با ابعاد جدید
        ctx.drawImage(img, 0, 0, width, height);

        // تبدیل canvas به blob
        canvas.toBlob(
          (blob) => {
            if (!blob) {
              reject(new Error('Canvas to Blob conversion failed'));
              return;
            }

            // ایجاد فایل جدید از blob
            const resizedFile = new File([blob], file.name, {
              type: file.type || 'image/jpeg',
              lastModified: Date.now(),
            });

            console.log('Image resized:', {
              original: `${img.width}x${img.height} (${(file.size / 1024).toFixed(2)} KB)`,
              resized: `${width}x${height} (${(resizedFile.size / 1024).toFixed(2)} KB)`,
            });

            resolve(resizedFile);
          },
          file.type || 'image/jpeg',
          quality
        );
      };

      img.onerror = () => {
        reject(new Error('Image loading failed'));
      };

      img.src = e.target?.result as string;
    };

    reader.onerror = () => {
      reject(new Error('File reading failed'));
    };

    reader.readAsDataURL(file);
  });
};
