<?php

/*
  =======================================================================
  Project     :    Storage Integration Services
  Description :    API to retrieve a given file from MinIO
              :     
              :
  Inputs      :    File ID from URL or JSON Param
  Outputs     :    File Body


  Change Date  Logon Name              Description
  ===========  ===== ================= ==================================
  02/02/2023   JC    Jason Calvert     Created

*/

   
//
// INCLUDED FILES
//

   // Library Functions
   require_once ('/Access/storage/lib/storage.library.php');
   
   // MinIO Libraries
   date_default_timezone_set('Australia/Perth');
   require_once ('/Access/storage/vendor/autoload.php');

   
//
// MAIN (INITIALISE)
//
   
   // JSON object data
   $JSONObject = file_get_contents('php://input');
   

   if($JSONObject) {
      // Split JSON Object back to a PHP Array
      $DocumentArray = json_decode($JSONObject,true);
      // JSON Parameters
      $DocumentKey = isset($DocumentArray['documentID']) ? $DocumentArray['documentID'] : '';
   } else {
      // URL Parameters
      $DocumentKey = isset($_GET['documentID']) ? $_GET['documentID'] : '';
   } // End Object


   // Clear the Return
   $ResponseData = array();
   $RecordKey = "";
   $ResultCode = "";
   $ResultFlag = True;
   
   
   // Check for Mandatory Params
   if(!$DocumentKey) { $ResultFlag = False; $ResultMessage = "Error: Missing documentID parameter"; }
   
  
   if($ResultFlag) {

      // New Connection to Storage Bucket
      $s3 = new Aws\S3\S3Client([
         'version' => 'latest',
         'region'  => 'us-east-1',
         'endpoint' => $Minio_Host,
         'credentials' => [
                 'key'    => $Minio_Key,
                 'secret' => $Minio_Secret,
             ],
      ]);
 

      $FileGet = $s3->getObject([
         'Bucket' => $Minio_Bucket,
         'Key'    => $DocumentKey
      ]);
    
      if($FileGet) {

         // Determine File Type
         $finfo = new finfo(FILEINFO_MIME);
         $MimeType =  $finfo->buffer($FileGet['Body']);
         header("Content-Type: $MimeType");
         
         // Print the body of the result by indexing into the result object.
         echo $FileGet['Body'];
         die();
      }
 
   }


   // Determine Return Data
   if($ResultFlag) {

      // Pull out only data we need
      $ResponseData["resultFlag"] = $ResultFlag;
      $ResponseData["code"]       = "200";
      $ResponseData["message"]    = "Store was successful";
      
   } else {
      
      $ResponseData["resultFlag"] = $ResultFlag;
      $ResponseData["code"]       = $ResultCode;
      $ResponseData["message"]    = $ResultMessage;
      
      // Blank Return and set Message
      http_response_code(400);
      
   }
   
   // Create and echo return JSON object
   $ReturnJSON = json_encode($ResponseData);

   // Set JSON Headers
   header('Content-Type: application/json');
   echo $ReturnJSON;
   
   
//
// Start HTML Results
//
   
?>