<?php

namespace App\Http\Controllers;

use Storage;
use Response;
use App\Services\Credit;
use App\Services\Invoice;
use Auth;

class FileController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
    }

    private function isPermission($user_id){

        if(Auth::user()->isAdmin() || $user_id == Auth::user()->id){
            return true;
        }
       abort(404);

    }

    public function show($id = null, $disk = null, $do='file')
    {
        $path = "";
        $filename = "";

        if($disk === 'user'){
            $file = \App\Models\File::findOrFail($id);
            $this->isPermission($file->user_id);
            $path = Storage::disk($disk)->path($file->dir.$file->filename);
            if (file_exists($path)) {
                return Response::file($path);
            }
        }
            
        if ($disk === 'invoice'){
            $shopping_order = \App\Models\ShoppingOrder::findOrFail($id);
            $this->isPermission($shopping_order->auth_user_id);
            $filename = Invoice::getFilename($shopping_order);   
            $path = Invoice::getDownloadPath($shopping_order);
        }
        
        
        if ($disk === 'delivery'){
            $shopping_order = \App\Models\ShoppingOrder::findOrFail($id);
            $this->isPermission($shopping_order->auth_user_id);
            $filename = Invoice::getDeliveryFilename($shopping_order);   
            $path = Invoice::getDownloadPathDelivery($shopping_order);
        }

        if ($disk === 'invoice_delivery'){
            $shopping_order = \App\Models\ShoppingOrder::findOrFail($id);
            $this->isPermission($shopping_order->auth_user_id);

            $ifilename = Invoice::getFilename($shopping_order);   
            $ipath = Invoice::getDownloadPath($shopping_order, true);
            $dfilename = Invoice::getDeliveryFilename($shopping_order);   
            $dpath = Invoice::getDownloadPathDelivery($shopping_order, true);

            $oMerger = new \App\Services\PDFMerger();
            $oMerger->init();

            $oMerger->addPDF($ipath);
            $oMerger->addPDF($dpath);
            $filename = str_replace('Rechnung-', 'Rechnung-Lieferschein-', $ifilename);
            $oMerger->setFileName($filename);
            $oMerger->merge();
            $file = $oMerger->output();
            return Response::make($file, 200)
                ->header("Content-Type", 'application/pdf')
                ->header('Content-disposition', 'attachment; filename="'.$filename.'"');
        }
        
        if ($disk === 'credit'){
            $UserCredit = \App\Models\UserCredit::findOrFail($id);
            $this->isPermission($UserCredit->auth_user_id);
            $filename = Credit::getFilename($UserCredit);   
            $path = Credit::getDownloadPath($UserCredit);
        }

        if (!Storage::disk('public')->exists($path)) {
            return Response::make('File no found.', 404);
        }

        $file = Storage::disk('public')->get($path);
        $mime = Storage::disk('public')->mimeType($path);

        if($do === 'download'){
            return Response::make($file, 200)
                ->header("Content-Type", $mime)
                ->header('Content-disposition', 'attachment; filename="'.$filename.'"');
           /* $full_path = Invoice::getDownloadPath($shopping_order, true);
            $he
            if (file_exists($full_path)) {
                return Response::download($full_path, $filename);
            }*/
        }
        if($do === 'stream'){
            return Response::make($file, 200)
                ->header("Content-Type", $mime)
                ->header('Content-disposition','filename="'.$filename.'"');
        }

        if($do === 'file'){
            return Response::make($file, 200)
                ->header("Content-Type", $mime)
                ->header('Content-disposition', 'filename="'.$filename.'"');
        }
        if($do === 'image'){
            return Response::make($file, 200)
                ->header("Content-Type", $mime);
        }
        if($do === 'pdf'){
            $path = storage_path().'/app/public/' . $path;
            $headers = array(
                'Content-Type:'. $mime,
               // 'Content-Length: ' . $file->size
               // 'Content-Disposition: ' . $stream . '; filename=' . $file->original_name
              );
              return Response::download($path, $filename, $headers);
        }


    }

}