<?php

/**
 * @copyright  2020 Podlibre
 * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
 * @link       https://castopod.org/
 */

/**
 * Saves a file to the corresponding podcast folder in `public/media`
 *
 * @param \CodeIgniter\HTTP\Files\UploadedFile|\CodeIgniter\Files\File $file
 * @param string $podcast_name
 * @param string $file_name
 *
 * @return string The episode's file path in media root
 */
function save_podcast_media($file, $podcast_name, $media_name)
{
    $file_name = $media_name . '.' . $file->getExtension();

    $mediaRoot = config('App')->mediaRoot;

    if (!file_exists($mediaRoot . '/' . $podcast_name)) {
        mkdir($mediaRoot . '/' . $podcast_name, 0777, true);
        touch($mediaRoot . '/' . $podcast_name . '/index.html');
    }

    // move to media folder and overwrite file if already existing
    $file->move($mediaRoot . '/' . $podcast_name . '/', $file_name, true);

    return $podcast_name . '/' . $file_name;
}

function download_file($fileUrl)
{
    $tmpFilename =
        time() .
        '_' .
        bin2hex(random_bytes(10)) .
        '.' .
        pathinfo($fileUrl, PATHINFO_EXTENSION);
    $tmpFilePath = WRITEPATH . 'uploads/' . $tmpFilename;
    file_put_contents($tmpFilePath, file_get_contents($fileUrl));

    return new \CodeIgniter\Files\File($tmpFilePath);
}

/**
 * Prefixes the root media path to a given uri
 *
 * @param  mixed  $uri      URI string or array of URI segments
 * @return string
 */
function media_path($uri = ''): string
{
    // convert segment array to string
    if (is_array($uri)) {
        $uri = implode('/', $uri);
    }
    $uri = trim($uri, '/');

    return config('App')->mediaRoot . '/' . $uri;
}

/**
 * Return the media base URL to use in views
 *
 * @param  mixed  $uri      URI string or array of URI segments
 * @param  string $protocol
 * @return string
 */
function media_url($uri = '', string $protocol = null): string
{
    return base_url(config('App')->mediaRoot . '/' . $uri, $protocol);
}