<?php

declare(strict_types=1);

namespace App\Http\Controllers\Helpers;


use App\Models\FileList;
use Hypervel\Http\Request;
use App\Http\Controllers\FilesMainController;

class PhotoURL
{
    public static function getDropzoneDetailsbyHashkey(string $filelist_hashkey): array|false
    {
        $fileList = FileList::where('hashkey', $filelist_hashkey)->first();
        if (!$fileList) {
            return false;
        }
        $fileContent = $fileList->fileContent()->first();
        $file_url = $fileList->resolvedUrl();
        $filename = $fileList->filename ?? $fileContent?->titlename ?? 'unknown_file';
        $thumbnail = null;
        return [
            'url' => $file_url,
            'name' => $filename,
            'size' => $fileContent->size_in_bytes ?? 0,
            'hashkey' => $fileList->hashkey,
            'thumbnail' => $thumbnail ??  $file_url, 
        ];
    }

    public static function photoURLArraytoDropzoneData(array|false|null $PhotoURLArray)
    {
        if (empty($PhotoURLArray)) {
            return false;
        }

        $dropzoneArray = [];
        foreach ($PhotoURLArray as $hashkey) {
            $dropzoneArray[] = self::getDropzoneDetailsbyHashkey($hashkey) ?? [];

        }
        return $dropzoneArray;
    }



    function generateThumbnailGD(string $sourcePath, string $destinationPath, int $width = 200, int $height = 200): bool
{
    if (!file_exists($sourcePath)) {
        return false;
    }

    $imageInfo = getimagesize($sourcePath);
    if (!$imageInfo) return false;

    [$srcWidth, $srcHeight] = $imageInfo;
    $mime = $imageInfo['mime'];

    // Create image resource from source
    switch ($mime) {
        case 'image/jpeg':
            $srcImage = imagecreatefromjpeg($sourcePath);
            break;
        case 'image/png':
            $srcImage = imagecreatefrompng($sourcePath);
            break;
        case 'image/gif':
            $srcImage = imagecreatefromgif($sourcePath);
            break;
        case 'image/webp':
            $srcImage = imagecreatefromwebp($sourcePath);
            break;
        default:
            return false; // unsupported
    }

    // Calculate new dimensions preserving aspect ratio
    $aspectRatio = $srcWidth / $srcHeight;
    if ($width / $height > $aspectRatio) {
        $width = (int)($height * $aspectRatio);
    } else {
        $height = (int)($width / $aspectRatio);
    }

    // Create the new thumbnail image
    $thumbImage = imagecreatetruecolor($width, $height);

    // Preserve transparency for PNG/GIF
    if (in_array($mime, ['image/png', 'image/gif'])) {
        imagecolortransparent($thumbImage, imagecolorallocatealpha($thumbImage, 0, 0, 0, 127));
        imagealphablending($thumbImage, false);
        imagesavealpha($thumbImage, true);
    }

    // Resize
    imagecopyresampled($thumbImage, $srcImage, 0, 0, 0, 0, $width, $height, $srcWidth, $srcHeight);

    // Save to file
    switch ($mime) {
        case 'image/jpeg':
            imagejpeg($thumbImage, $destinationPath, 85);
            break;
        case 'image/png':
            imagepng($thumbImage, $destinationPath);
            break;
        case 'image/gif':
            imagegif($thumbImage, $destinationPath);
            break;
        case 'image/webp':
            imagewebp($thumbImage, $destinationPath, 85);
            break;
    }

    // Cleanup
    imagedestroy($srcImage);
    imagedestroy($thumbImage);

    return true;
}

}
