<?php namespace App\Http\Controllers;

use App\Models\Dronesprayingfa;
use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator as Paginator;
use Validator, Input, Redirect ; 


class DronesprayingfaController extends Controller {

	protected $layout = "layouts.main";
	protected $data = array();	
	public $module = 'dronesprayingfa';
	static $per_page	= '50';

	public function __construct()
	{
		
		parent::__construct();
		$this->model = new Dronesprayingfa();
		$this->info = $this->model->makeInfo( $this->module);
		$this->access = array();
	
		$this->data = array_merge(array(
			'pageTitle'	=> 	$this->info['title'],
			'pageNote'	=>  $this->info['note'],
			'pageModule'=> 'dronesprayingfa',
			'return'	=> self::returnUrl()
			
		),$this->data);


		
	}

	public function index( Request $request )
	{
		// Make Sure users Logged 
		if(!\Auth::check()) 
			return redirect('user/login')->with('status', 'error')->with('message','You are not login');
		$this->grab( $request) ;
		if($this->access['is_view'] ==0) 
			return redirect('dashboard')->with('message', __('core.note_restric'))->with('status','error');				
		// Render into template
		return view( $this->module.'.index',$this->data);
	}	
	function show( Request $request , $id ) 
	{
		/* Handle import , export and view */
		$task =$id ;
		switch( $task)
		{

			case 'export':
				return $this->getExport( $request );
				break;
			case 'downloadExcel':
				return $this->downloadExcel($request);
				break;
		}
	}


	public function store( Request $request){

		$task = $request->input('action_task');
		switch ($task)
		{
			default:
				return $this->postData( $request);
				break;
			case 'getRekapDataDatatableAjax':
				return $this->getRekapDataDatatableAjax($request);
				break;
				

		}
	}

	public function getRekapDataDatatableAjax(Request $request)
	{
		$draw = intval($request->get('draw', 1));
		$start = intval($request->get('start', 0));
		$length = intval($request->get('length', 10));
		$searchValue = $request->get('search.value', '');
		$filterKebun = $request->get('filter_kebun', '');

		$query = \DB::table('q_lkp_rekap_dronespraying_fa_petak');
		if ($filterKebun) {
			$query->where('kebun', $filterKebun);
		}
		// Search filter
		if ($searchValue) {
			$columns = \Schema::getColumnListing('q_lkp_rekap_dronespraying_fa_petak');
			$query->where(function($q) use ($columns, $searchValue) {
				foreach ($columns as $col) {
					$q->orWhere($col, 'like', '%' . $searchValue . '%');
				}
			});
		}

		$total = \DB::table('q_lkp_rekap_dronespraying_fa_petak')->count();
		$filtered = $query->count();

		// Ordering
		$orderColumnIndex = $request->get('order.0.column', 0);
		$orderDir = $request->get('order.0.dir', 'asc');
		$orderColumn = $request->get('columns.' . $orderColumnIndex . '.data', 'tgl_input_terbaru');
		$query->orderBy($orderColumn, $orderDir);

		$data = $query->skip($start)->take($length)->get();

		return response()->json([
			'draw' => $draw,
			'recordsTotal' => $total,
			'recordsFiltered' => $filtered,
			'data' => $data
		]);
	}
	public function downloadExcel(Request $request)
	{
		$filterKebun = $request->get('filter_kebun', '');

		$query = \DB::table('q_lkp_rekap_dronespraying_fa_petak');
		if ($filterKebun) {
			$query->where('kebun', $filterKebun);
		}

		$data = $query->get();

		$filename = 'rekap_dronespraying_fa_petak_' . date('Ymd_His') . '.xlsx';

		$columns = \Schema::getColumnListing('q_lkp_rekap_dronespraying_fa_petak');

		// Use PhpSpreadsheet for Excel export
		$spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
		$sheet = $spreadsheet->getActiveSheet();

		// Set header
		foreach ($columns as $colIndex => $colName) {
			$sheet->setCellValueByColumnAndRow($colIndex + 1, 1, $colName);
		}

		// Set data
		$rowNum = 2;
		foreach ($data as $row) {
			foreach ($columns as $colIndex => $colName) {
				$sheet->setCellValueByColumnAndRow($colIndex + 1, $rowNum, $row->$colName);
			}
			$rowNum++;
		}

		// Output to browser
		$writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
		ob_start();
		$writer->save('php://output');
		$excelOutput = ob_get_clean();

		return response($excelOutput, 200, [
			'Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
			'Content-Disposition' => "attachment; filename=\"$filename\"",
		]);
	}
	

}