<?php

namespace App\Http\Controllers\Api\v1;

use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\Languages;
use App\Models\CategoryDetails;
use App\Models\Categories;
use App\Models\Videos;
use App\Models\Difficulties;
use App\Models\AgeManagement;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use App\Models\User;
use Illuminate\Support\Facades\Mail;
use URL;
use Image;
use DB;

class VideoController extends Controller
{
    
    public function __construct()
    {
        $this->middleware('auth:api');
    }

    
   public function getAllVideos(Request $request)
   {
        $output = array();
        $inputs['header']['authorization'] = $request->header('Authorization');
        $inputs['header']['lang'] = $request->header('Accept-Language');
        $inputs['header']['accept'] = $request->header('Accept');
        $inputs['body'][] = '';
        $folder = public_path('language/'.$inputs['header']['lang'].'.js');
        $json = file_get_contents($folder);
        $obj = json_decode($json, TRUE);
        $lang = Languages::where('code',$inputs['header']['lang'])->first();
        $langId = $lang->id; 
       
        $category = Categories::leftJoin('category_details', function ($join) {
            $join->on('categories.id', '=', 'category_details.category_id');
        })->select(
                'categories.id as id',
                'category_details.name as name',
                'categories.image as image',
                'categories.status as status'
            )
            ->where('category_details.language_id', '=', $langId)
            ->where('categories.status', 1)
            ->get();


        
            // DB::enableQueryLog();

        $catVid = Categories::leftJoin('category_details', function ($join) {
                    $join->on('categories.id', '=', 'category_details.category_id');
                    })->select(
                        'categories.id as id',
                        'category_details.name as name',
                        'categories.image as image',
                        'categories.status as status'
                    )
                    ->where('category_details.language_id', '=', $langId)
                    ->where('categories.status', 1)
                    ->with(['videoDetails' => function($query) use($langId){
                            $query->leftJoin('video_details', function ($joining) use($langId) {
                                $joining->on('videos.id', '=', 'video_details.video_id')->where('language_id', '=', $langId);
                                
                            })->orderBy('video_details.created_at', 'DESC');
                    }])->get();
                    
        if($category && $catVid)
        {
            $output['category'] = $category;
            $output['video'] = $catVid;

            $response = array('status'=>200, 'message'=>$obj['list-fetch-success'], 'result'=> $output);
            return response()->json($response);
        }
        else
        {
            $response = array('status'=>201, 'message'=>$obj['list-fetch-failed'], 'result'=> []);
            return response()->json($response);
        }
   }


   public function getAllDifficulty(Request $request)
   {
        $output = array();
        $inputs['header']['authorization'] = $request->header('Authorization');
        $inputs['header']['lang'] = $request->header('Accept-Language');
        $inputs['header']['accept'] = $request->header('Accept');
        $inputs['body'][] = '';
        $folder = public_path('language/'.$inputs['header']['lang'].'.js');
        $json = file_get_contents($folder);
        $obj = json_decode($json, TRUE);
        $lang = Languages::where('code',$inputs['header']['lang'])->first();
        $langId = $lang->id; 
       
       
        $diff = Difficulties::all();
       
                    
        if($diff)
        {
            $output['list'] = $diff;
            
            $response = array('status'=>200, 'message'=>$obj['list-fetch-success'], 'result'=> $output);
            return response()->json($response);
        }
        else
        {
            $response = array('status'=>201, 'message'=>$obj['list-fetch-failed'], 'result'=> []);
            return response()->json($response);
        }
   }



   public function getAllAges(Request $request)
   {
        $output = array();
        $inputs['header']['authorization'] = $request->header('Authorization');
        $inputs['header']['lang'] = $request->header('Accept-Language');
        $inputs['header']['accept'] = $request->header('Accept');
        $inputs['body'][] = '';
        $folder = public_path('language/'.$inputs['header']['lang'].'.js');
        $json = file_get_contents($folder);
        $obj = json_decode($json, TRUE);
        $lang = Languages::where('code',$inputs['header']['lang'])->first();
        $langId = $lang->id; 
       
       
        $ages = AgeManagement::all();
       
                    
        if($ages)
        {
            $output['list'] = $ages;
            
            $response = array('status'=>200, 'message'=>$obj['list-fetch-success'], 'result'=> $output);
            return response()->json($response);
        }
        else
        {
            $response = array('status'=>201, 'message'=>$obj['list-fetch-failed'], 'result'=> []);
            return response()->json($response);
        }
   }

   public function getFilterVideos(Request $request)
   {
        $output = array();
        $inputs['header']['authorization'] = $request->header('Authorization');
        $inputs['header']['lang'] = $request->header('Accept-Language');
        $inputs['header']['accept'] = $request->header('Accept');
        $inputs['body']['difficulty_id'] = $request->get('difficulty_id');
        $inputs['body']['age'] = $request->get('age_id');
        $inputs['body']['cat_id'] = $request->get('cat_id');
        $cat_id = $inputs['body']['cat_id'];
        $folder = public_path('language/'.$inputs['header']['lang'].'.js');
        $json = file_get_contents($folder);
        $obj = json_decode($json, TRUE);
        $lang = Languages::where('code',$inputs['header']['lang'])->first();
        $langId = $lang->id; 


        if($cat_id)
       {
                        
            if($inputs['body']['difficulty_id'] == '' && $inputs['body']['age'] == '')
            {
                $category = Categories::leftJoin('category_details', function ($join) {
                $join->on('categories.id', '=', 'category_details.category_id');
                })->select(
                        'categories.id as id',
                        'category_details.name as name',
                        'categories.image as image',
                        'categories.status as status'
                    )
                    ->where('category_details.language_id', '=', $langId)
                    ->where('categories.status', 1)
                    ->get();


                $catVid = Categories::leftJoin('category_details', function ($join) {
                        $join->on('categories.id', '=', 'category_details.category_id');
                        })->select(
                            'categories.id as id',
                            'category_details.name as name',
                            'categories.image as image',
                            'categories.status as status'
                        )
                        ->where('category_details.language_id', '=', $langId)
                        ->where('categories.status', 1)
                        ->where('categories.id', $cat_id)
                        ->with(['videoDetails' => function($query) use($langId, $cat_id){
                                $query->leftJoin('video_details', function ($joining) use($langId, $cat_id) {
                                    $joining->on('videos.id', '=', 'video_details.video_id')->where('language_id', '=', $langId)->where('category_id', $cat_id);
                                    
                                })->orderBy('video_details.created_at', 'DESC');
                        }])->get();
                        
                if($category && $catVid)
                {
                    // $output['category'] = $category;
                    $output['video'] = $catVid;

                    $response = array('status'=>200, 'message'=>$obj['list-fetch-success'], 'result'=> $output);
                    return response()->json($response);
                }
                else
                {
                    $response = array('status'=>201, 'message'=>$obj['list-fetch-failed'], 'result'=> []);
                    return response()->json($response);
                }
            }
            elseif($inputs['body']['difficulty_id'] && $inputs['body']['age'] == '')
            {
                return $this->difficultyFilter($inputs['body']['difficulty_id'], $langId, $cat_id);
            }
            elseif($inputs['body']['age'] && $inputs['body']['difficulty_id'] == '')
            {
                return $this->ageFilter($inputs['body']['age'], $langId, $cat_id);
            }
            else
            {
                return $this->bothFilter($inputs['body']['age'], $inputs['body']['difficulty_id'], $langId, $cat_id);   
            }

            

            
       }
       else
       {
            $response = array('status'=>201, 'message'=>$obj['category_id_required'], 'result'=> (object)[]);
            return response()->json($response);
       }    
   }

   public function difficultyFilter($id, $langId, $cat_id)
   {
        $output = array();
        $difficulty_id = $id;
        $lang = Languages::find($langId);
        $lang_id = $lang->code;
        
        $folder = public_path('language/'.$lang_id.'.js');
        $json = file_get_contents($folder);
        $obj = json_decode($json, TRUE);
        

        $category = Categories::leftJoin('category_details', function ($join) {
            $join->on('categories.id', '=', 'category_details.category_id');
            })->select(
                    'categories.id as id',
                    'category_details.name as name',
                    'categories.image as image',
                    'categories.status as status'
                )
                ->where('category_details.language_id', '=', $langId)
                ->where('categories.status', 1)
                ->get();

                    
        $catVidDiff = Categories::leftJoin('category_details', function ($join) {
                $join->on('categories.id', '=', 'category_details.category_id');
                })->select(
                    'categories.id as id',
                    'category_details.name as name',
                    'categories.image as image',
                    'categories.status as status'
                )
                ->where('category_details.language_id', '=', $langId)
                ->where('categories.status', 1)
                ->where('categories.id', $cat_id)
                ->with(['videoDetails' => function($query) use($langId, $cat_id, $difficulty_id){
                        $query->join('video_details', function ($joining) use($langId, $cat_id, $difficulty_id) {
                            // dd($difficulty_id);
                            $joining->on('videos.id', '=', 'video_details.video_id')->where('video_details.language_id', '=', $langId)->where('videos.category_id', $cat_id)->where('videos.difficulty_id', $difficulty_id);
                            
                        })->orderBy('video_details.created_at', 'DESC');
                }])->get();
         // dd($catVidDiff);       
        if($category && $catVidDiff)
        {
            // $output['category'] = $category;
            $output['video_diff'] = $catVidDiff;

            $response = array('status'=>200, 'message'=>$obj['list-fetch-success'], 'result'=> $output);
            return response()->json($response);
        }
        else
        {
            $response = array('status'=>201, 'message'=>$obj['list-fetch-failed'], 'result'=> []);
            return response()->json($response);
        }
   }


   public function ageFilter($id, $langId, $cat_id)
   {
        $output = array();
        $age_id = $id;
        $lang = Languages::find($langId);
        $lang_id = $lang->code;
        
        $folder = public_path('language/'.$lang_id.'.js');
        $json = file_get_contents($folder);
        $obj = json_decode($json, TRUE);
        

        $category = Categories::leftJoin('category_details', function ($join) {
            $join->on('categories.id', '=', 'category_details.category_id');
            })->select(
                    'categories.id as id',
                    'category_details.name as name',
                    'categories.image as image',
                    'categories.status as status'
                )
                ->where('category_details.language_id', '=', $langId)
                ->where('categories.status', 1)
                ->get();

                    
        $catVidAge = Categories::leftJoin('category_details', function ($join) {
                $join->on('categories.id', '=', 'category_details.category_id');
                })->select(
                    'categories.id as id',
                    'category_details.name as name',
                    'categories.image as image',
                    'categories.status as status'
                )
                ->where('category_details.language_id', '=', $langId)
                ->where('categories.status', 1)
                ->where('categories.id', $cat_id)
                ->with(['videoDetails' => function($query) use($langId, $cat_id, $age_id){
                        $query->join('video_details', function ($joining) use($langId, $cat_id, $age_id) {
                            // dd($difficulty_id);
                            $joining->on('videos.id', '=', 'video_details.video_id')->where('video_details.language_id', '=', $langId)->where('videos.category_id', $cat_id)->where('videos.age_recom', $age_id);
                            
                        })->orderBy('video_details.created_at', 'DESC');
                }])->get();
                
        if($category && $catVidAge)
        {
            // $output['category'] = $category;
            $output['video_age'] = $catVidAge;

            // print_r($output);
            // exit;

            $response = array('status'=>200, 'message'=>$obj['list-fetch-success'], 'result'=> $output);
            return response()->json($response);
        }
        else
        {
            $response = array('status'=>201, 'message'=>$obj['list-fetch-failed'], 'result'=> (object)[]);
            return response()->json($response);
        }
   }

   public function bothFilter($id, $diff_id, $langId, $cat_id)
   {
        $output = array();
        $age_id = $id;
        $difficulty_id = $diff_id;
        $lang = Languages::find($langId);
        $lang_id = $lang->code;
        
        $folder = public_path('language/'.$lang_id.'.js');
        $json = file_get_contents($folder);
        $obj = json_decode($json, TRUE);
        

        $category = Categories::leftJoin('category_details', function ($join) {
            $join->on('categories.id', '=', 'category_details.category_id');
            })->select(
                    'categories.id as id',
                    'category_details.name as name',
                    'categories.image as image',
                    'categories.status as status'
                )
                ->where('category_details.language_id', '=', $langId)
                ->where('categories.status', 1)
                ->get();

                    
        $catVidBoth = Categories::leftJoin('category_details', function ($join) {
                $join->on('categories.id', '=', 'category_details.category_id');
                })->select(
                    'categories.id as id',
                    'category_details.name as name',
                    'categories.image as image',
                    'categories.status as status'
                )
                ->where('category_details.language_id', '=', $langId)
                ->where('categories.status', 1)
                ->where('categories.id', $cat_id)
                ->with(['videoDetails' => function($query) use($langId, $cat_id, $age_id, $difficulty_id){
                        $query->join('video_details', function ($joining) use($langId, $cat_id, $age_id, $difficulty_id) {
                            // dd($difficulty_id);
                            $joining->on('videos.id', '=', 'video_details.video_id')->where('video_details.language_id', '=', $langId)->where('videos.category_id', $cat_id)->where('videos.age_recom', $age_id)->where('videos.difficulty_id', $difficulty_id);
                            
                        })->orderBy('video_details.created_at', 'DESC');
                }])->get();
                
        if($category && $catVidBoth)
        {
            // $output['category'] = $category;
            $output['video_age'] = $catVidBoth;

            $response = array('status'=>200, 'message'=>$obj['list-fetch-success'], 'result'=> $output);
            return response()->json($response);
        }
        else
        {
            $response = array('status'=>201, 'message'=>$obj['list-fetch-failed'], 'result'=> []);
            return response()->json($response);
        }
   }


   
}
