<?php

namespace App\Actions;

use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use App\Services\ApiService;
use App\View\Pages;

class MediaAction
{
    private ApiService $rest;
    private $folder;
    private $defaults;
    private Pages $view;
    
    public function __construct($config, ApiService $api, Pages $view)
    {
	$this->rest = $api;
	$this->folder = $config['media']['folder'];
	$this->defaults = $config['defaults'];
	$this->view = $view;
    }

    public function get(ServerRequestInterface $request,
			ResponseInterface $response, array $args): ResponseInterface
    {
	$files =  glob("$this->folder/*.wav");
	$media = [];
	foreach ($files as $file){
	    $media[] = basename($file);
	}
	return $this->view->render($request, $response, "media.html",
			     ['files' => $media,
			      'defaults' => $this->defaults]);
	/* return $view->render($response, "media.html",
	   ['files' => $media,
	   'defaults' => $this->defaults]); */
    }

    public function del(ServerRequestInterface $request,
			ResponseInterface $response, array $args): ResponseInterface
    {
	$name = $args['name'];
	$files =  unlink("$this->folder/$name");
	$response->getBody()->write("ok");
    }


    public function upload(ServerRequestInterface $request,
			   ResponseInterface $response, array $args): ResponseInterface
    {
	$directory = "$this->folder/";
	$uploadedFiles = $request->getUploadedFiles();
	/* echo var_dump($uploadedFiles); */
	// handle single input with single file upload
	$uploadedFile = $uploadedFiles['media'];
	$error = $uploadedFile->getError();
	if ($error == UPLOAD_ERR_OK) {
	    echo "upload file OK";
	    $filename = $uploadedFile->getClientFilename();
	    // $filename = moveUploadedFile($directory, $uploadedFile);
	    $uploadedFile->moveTo($directory . DIRECTORY_SEPARATOR . $filename);
	    echo $filename;
	    /* $response->getBody()->write('Uploaded: ' . $filename . '<br/>'); */
	} else {
	    echo "upload file ERROR";
	    echo var_dump($error);
	}
	return $response->withStatus(302)
			->withHeader('Location', "/ui/media");

    }

    public function record(ServerRequestInterface $request,
			   ResponseInterface $response, array $args): ResponseInterface
    {
	$params = $request->getParsedBody();
	$fn = $params['file_name'];
	$words = explode(' ', $fn);
	$fn  = implode('_', $words);
	$fn = $fn.".wav";
	$number = $params['number'];
	$from = $this->defaults['number_from'];
	$current_session = $this->rest->record($fn, $number, $from);

	$files =  glob("$this->folder/*.wav");
	$media = [];
	foreach ($files as $file){
	    $media[] = basename($file);
	}
	return $response->withStatus(302)->withHeader('Location', '/ui/media');
	/* return $view->render($response, "media.html",
	   ['files' => $media,
	   'session' => $session]); */
	
    }

    public function express(ServerRequestInterface $request,
			    ResponseInterface $response, array $args): ResponseInterface
    {
	$params = $request->getQueryParams();
	$fn = $params['file_name'];
	$from = $params['from'];
	$number = $params['number'];
	$current_session = $this->rest->record($fn, $number, $from);
	$response->getBody()->write("ok");
	return $response;
	
    }
}
