<?php
namespace App\Http\Controllers\v2019;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Http\Controllers\Auth\User ;
use App\Http\Controllers\Auth\authentication;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\JsonResponse;
use App\Http\Controllers\Action\Common;
//stepLogic
use App\Http\Controllers\Action\StplCommonController;
use Validator;

class TabularController extends Controller
{
  /*it used to show tabuler filter according selection of datatype */
    public function getTabularFilter(Request $request){
        $trimmed = array_map('trim', $request->all());
        $validate = Validator::make($trimmed, [
              'resourceType' => 'required|in:Web,web',
              'requireData' => 'required|in:tabularFilter',
              'requiredFor' => 'required|in:statistics,price',
              'dataType' => 'required'
          ]);
        if ($validate->fails()) {    
        return response()->json($validate->messages(), 200);
    }

    $datatype = trim($request->dataType);
    if($request->resourceType == 'Web'){
        $datatypeAvailablebothtable = 'true';


        if(DB::table('tbl_stats_selection_compare')->where('datatypeName',$datatype)->count() < 1 || DB::table('tbl_stats_datatype_header_list')->where('datatypeName',$datatype)->count() < 1){
           $datatypeAvailablebothtable = 'false';
        } 


        $table = array('tbl_stats_datatype_header_list','tbl_stats_selection_compare');
        if($datatypeAvailablebothtable == 'true'){
          
          $objCommon = new StplCommonController;
          $dataArray = $objCommon->getTabularFilter($datatype);

          $status = 1001;
          $message= "success";
          $getresponce = $this->innerResponceHander($dataArray,$status,$message);

        }
        else {
          $getresponce = array(
               'status' => 404,
               'message' => 'dataType not Found'
          );
        }
     
        if($request->debugMode=='enable'){
            $getresponce['debugMode']['usedtable'] = $table;
        }       
        
       return response()->json($getresponce);
    } 
      else if($request->resourceType == 'APP') {

      }
       
    }


       /*it used to show tabuler data after click go button*/
  public function getTabular(Request $request){

        $objCommon = new StplCommonController;
        $trimmed = array_map('trim', $request->all());

        $valid = [];
        $valid['resourceType'] = 'required|in:Web,web';
        $valid['requireData'] = 'required|in:getTabularData';
        $valid['requiredFor'] = 'required|in:statistics,price';
        $valid['dataType'] = 'required';
        $valid['commodity'] = 'required';
        $valid['region'] = 'required';
        $valid['memid'] = 'required';
        
        if(trim($request->region) != "ALL"){
          $valid['columnNameOfRegion'] = 'required';
        }
        
        if(trim($request->commodity) != "ALL"){
          $valid['columnNameOfCommodity'] = 'required';
        }

         if(trim($request->region) == "ALL" && trim($request->commodity) == "ALL"){
          $valid['commodity'] = 'required|not_in:All,ALL,all';
        }

        $check = $this->checkInputisValid($valid,$request->all());

        if($check){
          return response()->json($check);
       }else{
        
        $datatype = trim($request->dataType);
        $commodity = trim($request->commodity);
        $commodityColumn = trim($request->columnNameOfCommodity);
        $region = trim($request->region);
        $columnNameOfRegion = trim($request->columnNameOfRegion);
        $requiredFor = trim($request->requiredFor);
        $memid = trim($request->memid);


        $objCommon = new StplCommonController;
        $checkRecordExist = $objCommon->checkDatatypeExist($datatype);

        if($checkRecordExist!='true'){
          $status = array(
              'status' => 2001,
              'message' => 'dataType not Found!'
            );
           return response()->json($status);
           exit;
        }
        
        if($request->resourceType == 'Web'){
            $data = $objCommon->getTabularData($requiredFor,$datatype,$commodity,$commodityColumn,$region,$columnNameOfRegion,$memid);
        } else if($request->resourceType == 'APP') {

        }
        if($data){
              $status = 1001;
              $message = 'success';
              $getresponce = $this->innerResponceHander($data,$status,$message);
          } else {
            $status = 404;
            $message = 'Data not Found';
          }

          $getresponce = $this->innerResponceHander($data,$status,$message);
          if($request->debugMode=='true'){
                $table = array('tbl_stats_datatype_header_list,tbl_stats_datatype_freq','tbl_stats_selection_compare');
                $getresponce['debugMode']['usedtable'] = $table;
                $getresponce['debugMode']['argumentDetail'] = $valid;
          }  

          return response()->json($getresponce);
    }

  }
 

   public function innerResponceHander($data,$status,$message){
       $status = array(
               'status' => $status,
               'message' => $message 
        );
           $responce = array(
             'data' => $data,
             'status' => $status
        );
       return $responce;
    }



    public function checkInputisValid($rule,$reqx){
       $trimmed = array_map('trim', $reqx);
       $messages = [
           'resourceType.required' => 'resourceType required!',
        ];  
        $validate = Validator::make($trimmed, $rule,$messages);
        if ($validate->fails()) {  
            $validationFailedArray = array();
            $validationFailedArray['status'] = array(
               'code' => 2001, 
                'messages' => 'Invalid input.'
               //'message' => $validate->errors()->first()
              );
          return $validationFailedArray;
      }
    }
}


?>