<?php
namespace app\components;
use Yii;
use yii\base\Component;
use Exception;

class CommonFunctions extends Component
{
    public function base64ToImage($base64_string, $output_file)
    {
        try {
            $file = fopen($output_file, "wb");
            fwrite($file, base64_decode($base64_string));
            fclose($file);
            if (filesize($output_file) > 150 * 1024) {
                // Tamaño mayor a 300 KB
                $max_width = 800;
                $max_height = 600;
                $this->resizeImage($output_file, $max_width, $max_height);
            }
        } catch (Exception $e) {
            Yii::error("Error al comprimir imagen:" . $e->getMessage());
        }
        return $output_file;
    }

    public function resizeImage($filename, $max_width, $max_height)
    {
        try {
            list($width, $height, $type) = getimagesize($filename);
            // Obtiene las nuevas medidas
            list($new_width, $new_height) = $this->getNewSize(
                $width,
                $height,
                $max_width,
                $max_height
            );

            // Crea una nueva imagen con las nuevas medidas
            $thumb = imagecreatetruecolor($new_width, $new_height);
            switch ($type) {
                case IMAGETYPE_JPEG:
                    $source = imagecreatefromjpeg($filename);
                    break;
                case IMAGETYPE_PNG:
                    $source = imagecreatefrompng($filename);
                    break;
                case IMAGETYPE_GIF:
                    $source = imagecreatefromgif($filename);
                    break;
                default:
                    throw new Exception("Unsupported image type.");
            }

            // Copia y cambia el tamaño de la imagen
            imagecopyresampled(
                $thumb,
                $source,
                0,
                0,
                0,
                0,
                $new_width,
                $new_height,
                $width,
                $height
            );
            // Guarda la imagen
            switch ($type) {
                case IMAGETYPE_JPEG:
                    imagejpeg($thumb, $filename, 75); // 75 es la calidad de la imagen
                    break;
                case IMAGETYPE_PNG:
                    imagepng($thumb, $filename, 6); // 6 es la compresión de la imagen
                    break;
                case IMAGETYPE_GIF:
                    imagegif($thumb, $filename);
                    break;
            }
            // Libera memoria
            imagedestroy($thumb);
            imagedestroy($source);
        } catch (Exception $e) {
            Yii::error("Error" . $e->getMessage());
        }
    }

    private function getNewSize($width, $height, $max_width, $max_height)
    {
        $ratio = min($max_width / $width, $max_height / $height);
        return [$width * $ratio, $height * $ratio];
    }
}
