<?php namespace App\Http\Controllers;

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

class GudangareaController extends Controller {

	protected $layout = "layouts.main";
	protected $data = array();	
	public $module = 'gudangarea';
	static $per_page	= '10';
	
	public function __construct() 
	{
		parent::__construct();
		$this->model = new Gudangarea();
		
		$this->info = $this->model->makeInfo( $this->module);
		$this->access = $this->model->validAccess($this->info['id']);
	
		$this->data = array(
			'pageTitle'			=> 	$this->info['title'],
			'pageNote'			=>  $this->info['note'],
			'pageModule'		=> 'gudangarea',
			'pageUrl'			=>  url('gudangarea'),
			'return' 			=> 	self::returnUrl()	
		);	
			
				
	} 
	public function index()
	{
		if(!\Auth::check()) 
			return redirect('user/login')->with('status', 'error')->with('message','You are not login');

		$this->access = $this->model->validAccess($this->info['id'] , session('gid'));
		if($this->access['is_view'] ==0) 
			return redirect('dashboard')->with('message',__('core.note_restric'))->with('status','error');
		
		$this->data['setting'] 		= $this->info['setting'];
		$this->data['tableForm'] 	= $this->info['config']['forms'];
		$this->data['tableGrid'] 	= $this->info['config']['grid'];
		usort($this->data['tableGrid'], "SiteHelpers::_sort");
			$cols = '{"data":"rowId"},';
			if($this->data['setting']['view-method'] =='expand'){
				$cols .= '{"className": "details-control","orderable": false,"data": null,"defaultContent": ""},';
			}		
				
			foreach($this->data['tableGrid'] as $field)
			{				
				
				if($field['view'] =='1')
				{
					$cols .= '{"data":"'.$field['field'].'"},';
				}						
			}
			$cols .= '{"data":"action"},';
		$this->data['column'] = $cols ;	
		$this->data['access']		= $this->access;	
		$this->data['setting'] 		= $this->info['setting'];
		return view('gudangarea.index',$this->data);
	}
	function create( Request $request ) 
	{
		$this->hook( $request  );
		if($this->access['is_add'] ==0) 
			return redirect('dashboard')->with('message', __('core.note_restric'))->with('status','error');

		$this->data['row'] = $this->model->getColumnTable( $this->info['table']); 
		
		$this->data['setting'] 		= $this->info['setting'];
		$this->data['id'] = '';
		return view($this->module.'.form',$this->data);
	}
	function edit( Request $request , $id ) 
	{
		$this->hook( $request , $id );
		if(!isset($this->data['row']))
			return redirect($this->module)->with('message','Record Not Found !')->with('status','error');
		if($this->access['is_edit'] ==0 )
			return redirect('dashboard')->with('message',__('core.note_restric'))->with('status','error');
		$this->data['row'] = (array) $this->data['row'];
		
		$this->data['setting'] 		= $this->info['setting'];
		$this->data['id'] = $id;
		return view($this->module.'.form',$this->data);
	}
	function show( Request $request , $id ) 
	{
		/* Handle import , export and view */
		$task =$id ;
		switch( $task)
		{
			case 'search':
				return $this->getSearch();
				break;
			case 'lookup':
				return $this->getLookup($request );
				break;
			case 'comboselect':
				return $this->getComboselect( $request );
				break;
			case 'import':
				return $this->getImport( $request );
			case 'removefiles':
				return $this->getRemovefiles( $request );	
				break;
			case 'export':
				return $this->getExport( $request );
				break;
			case 'dashboard':
				return $this->dashboard( $request );
				break;		
			case 'pengeluaran_pupuk_daerah':
				return $this->pengeluaran_pupuk_daerah( $request );
				break;						
			case 'mappupuk':
				return $this->mappupuk( $request );
				break;
			case 'getAreaKebunData':
				return $this->getAreaKebunData( $request );
				break;
			case 'getPpkMapTable':
				return $this->getPpkMapTable( $request );
				break;
			case 'getPpkMapTable2':
				return $this->getPpkMapTable2( $request );
				break;	
			case 'getChartStokPupuk':
				return $this->getChartStokPupuk( $request );
				break;
			case 'getTransferPupukTable':
				return $this->getTransferPupukTable( $request );
				break;
			case 'getTransferPupukTableRayon':
				return $this->getTransferPupukTableRayon( $request );
				break;
			case 'getDistribusiPupukTable':
				return $this->getDistribusiPupukTable( $request );
				break;	
			default:
				$this->hook( $request , $id );
				if(!isset($this->data['row']))
					return redirect($this->module)->with('message','Record Not Found !')->with('status','error');

				if($this->access['is_detail'] ==0) 
					return redirect('dashboard')->with('message', __('core.note_restric'))->with('status','error');

				return view($this->module.'.view',$this->data);	
				break;		
		}
	}	
	public function store( Request $request){

		$task = $request->input('action_task');
		switch ($task)
		{
			default:
				return $this->postData( $request);
				break;
			case 'save':
				$rules = $this->validateForm();
				$validator = Validator::make($request->all(), $rules);
				if ($validator->passes()) 
				{
					$data = $this->validatePost( $request );
					$data['unit'] = session('plant');
					$getkode = $this->model->cekKode();
					$data['kode_area'] = session('plant').str_pad($getkode->hit,2,"0",STR_PAD_LEFT);
					$id = $this->model->insertRow($data , $request->input( $this->info['key']));
					
					/* Insert logs */
					$this->model->logs($request , $id);
					return response()->json(array('status'=>'success','message'=> __('core.note_success')));	
					
				} 
				else {
					$message = $this->validateListError(  $validator->getMessageBag()->toArray() );
					return response()->json(array(
						'message'	=> $message,
						'status'	=> 'error'
					));	
				}
				break;
			case 'delete':
				return $result = $this->destroy( $request );
				break;

			case 'import':
				return $this->PostImport( $request );
				break;
			case 'setuploadsap':
				return $this->setuploadsap( $request );
				break;

			case 'copy':
				$result = $this->copy( $request );
				return response()->json($result);
				break;		

		}
	}
	public function postData( $request)
	{ 
		
		$this->access = $this->model->validAccess($this->info['id'] , session('gid'));

		$tables 	= $this->info['config']['grid'];
		$cols = array();
		foreach($tables as $field)
		{				
			//$cols[$this->info['key']]	= array('db'=> $field['alias'] ,$this->info['key'] );
			if($field['view'] =='1')
			{
				$cols[] = array('db'=> $field['alias'],'dt'=> $field['field'] );
			}					
		}
		$conf = DataHelpers::simple($request->all(),$cols);
		$filter =  '';
		if(!is_null($request->input('search')))
		{
			$filter .= $this->liveSearch( $request);
		}

		$filter .= "and unit = '".session('plant')."'";

		$params = array(
			'page'		=> $conf['page'] ,
			'limit'		=> $conf['limit'] ,
			'sort'		=> ($conf['order']['sort'] !='' ? $conf['order']['sort'] : $this->info['setting']['orderby']) ,
			'order'		=> ($conf['order']['by'] !='' ? $conf['order']['by'] : $this->info['setting']['ordertype']),
			'params'	=> $filter,
			'global'	=> (isset($this->access['is_global']) ? $this->access['is_global'] : 0 )
		);


		$results = $this->model->getRows($params);
		
		$array = array();
		foreach($results['rows'] as $row)
		{
			$values = array();
			$values['rowId'] = $row->{$this->info['key']};
			foreach($tables as $field)
			{			
				
				if($field['view'] =='1')
				{
					$values[$field['field']] = \SiteHelpers::formatRows($row->{$field['field']}, $field , $row);
				}	
			}
			$values['action'] =  \SiteHelpers::buttonAction($this->module,$this->access ,$row->{$this->info['key']} ,$this->info['setting']) ;
			$array[] = $values; 	
		}
		
		$data = array(
			'draw'			=> (!is_null($request->input('draw')) ? intval($request->input('draw') ) : 0), 
			'recordsTotal'	=> $results['total'] ,
			'recordsFiltered'	=> $results['total'],
			'data'				=> $array

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

	public function destroy( Request $request)
	{

		if(!\Auth::check()) 
			return response()->json(array(
				'status'=>'error',
				'message'=> 'You are not login'
			));

		$this->access = $this->model->validAccess($this->info['id'] , session('gid'));
		if($this->access['is_remove'] ==0) 
			return response()->json(array('status'=>'error','message'=> __('core.note_restric')));	


		// delete multipe rows 
		if(count($request->input('ids')) >=1)
		{
			$this->model->destroy($request->input('ids'));
			
			return response()->json(array(
				'status'=>'success',
				'message'=> __('core.note_success_delete')
			));
		} else {
			return response()->json(array(
				'status'=>'error',
				'message'=> __('core.note_error')
			));

		} 		

	}

	public function getAreaKebunData()
	{
		$areas['area'] = \DB::table('m_area_kebun')
			->select('kode_area', 'nama_area', 'koordinat')
			->get();
		$areas['induk'] = \DB::table('m_gudang_induk')
			->select('kode_gudang', 'nama_gudang', 'koordinat')
			->get();	

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

	public function mappupuk(Request $request)
	{
		return view('dashboard.mappupuk');
	}

	public function getPpkMapTable(Request $request)
	{
		$kode = $request->input('kode');
		$ppkmapData = $this->model->ppkmap($kode);

		$html = '
		<style>
			.ppkmap-table-container {
				max-height: 400px;
				overflow-y: auto;
				border: 1px solid #ddd;
				background: linear-gradient(135deg, #e0eafc 0%, #cfdef3 100%);
				border-radius: 8px;
				box-shadow: 0 2px 8px rgba(0,0,0,0.07);
			}
			.ppkmap-table {
				width: 100%;
				border-collapse: collapse;
				background: #fff;
				border-radius: 8px;
				// overflow: hidden;
			}
			.ppkmap-table th, .ppkmap-table td {
				padding: 10px 14px;
				border: 1px solid #ddd;
				text-align: left;
				transition: background 0.2s;
			}
			.ppkmap-table th {
				background: linear-gradient(90deg, #6dd5ed 0%, #2193b0 100%);
				color: #fff;
				position: sticky;
				top: 0;
				z-index: 2;
				box-shadow: 0 2px 2px -2px #ccc;
				font-weight: 600;
				letter-spacing: 0.5px;
			}
			.ppkmap-table tr:nth-child(even) {
				background: #f2f9ff;
			}
			.ppkmap-table tr:nth-child(odd) {
				background: #eaf6fb;
			}
			.ppkmap-table tr:hover td {
				background: #ffe082;
			}
		</style>
		<div class="ppkmap-table-container">
			<table class="ppkmap-table">
				<thead>
					<tr>';
		if (!empty($ppkmapData) && count($ppkmapData) > 0) {
			foreach (array_keys((array)$ppkmapData[0]) as $col) {
				$html .= '<th style="position: sticky; top: 0; background: linear-gradient(90deg, #6dd5ed 0%, #2193b0 100%); z-index: 10;">' . htmlspecialchars($col) . '</th>';
			}
		}
		$html .= '</tr>
				</thead>
				<tbody>';

		if (!empty($ppkmapData)) {
			foreach ($ppkmapData as $row) {
				$html .= '<tr>';
				foreach ((array)$row as $value) {
					if (is_numeric($value)) {
						$html .= '<td>' . ($value == '0' ? '-' : number_format($value)) . '</td>';
					} else {
						$html .= '<td>' . ($value == '0' ? '-' : htmlspecialchars($value)) . '</td>';
					}
				}
				$html .= '</tr>';
			}
		} else {
			$html .= '<tr><td colspan="100%">Data tidak ditemukan</td></tr>';
		}

		$html .= '</tbody></table></div>';

		return response($html);
	}

	public function getPpkMapTable2(Request $request)
	{
		$kode = $request->input('kode');
		$ppkmapData = $this->model->saldo_pupuk($kode);

		$html = '
		<style>
			.ppkmap-table-container {
				max-height: 400px;
				overflow-y: auto;
				border: 1px solid #ddd;
				background: linear-gradient(135deg, #e0eafc 0%, #cfdef3 100%);
				border-radius: 8px;
				box-shadow: 0 2px 8px rgba(0,0,0,0.07);
			}
			.ppkmap-table {
				width: 100%;
				border-collapse: collapse;
				background: #fff;
				border-radius: 8px;
			}
			.ppkmap-table th, .ppkmap-table td {
				padding: 10px 14px;
				border: 1px solid #ddd;
				text-align: left;
				transition: background 0.2s;
			}
			.ppkmap-table th {
				background: linear-gradient(90deg, #6dd5ed 0%, #2193b0 100%);
				color: #fff;
				position: sticky;
				top: 0;
				z-index: 2;
				box-shadow: 0 2px 2px -2px #ccc;
				font-weight: 600;
				letter-spacing: 0.5px;
			}
			.ppkmap-table tr:nth-child(even) {
				background: #f2f9ff;
			}
			.ppkmap-table tr:nth-child(odd) {
				background: #eaf6fb;
			}
			.ppkmap-table tr:hover td {
				background: #ffe082;
			}
		</style>
		<div class="ppkmap-table-container">
			<table class="ppkmap-table">
				<thead>
					<tr>
						<th>Nama</th>
						<th>Jenis</th>
						<th>Satuan</th>
						<th>Saldo</th>
					</tr>
				</thead>
				<tbody>';
		if (!empty($ppkmapData)) {
			foreach ($ppkmapData as $row) {
				$html .= '<tr>';
				$html .= '<td>' . htmlspecialchars($row->nama ?? '') . '</td>';
				$html .= '<td>' . htmlspecialchars($row->jenis ?? '') . '</td>';
				$html .= '<td>' . htmlspecialchars($row->satuan ?? '') . '</td>';
				$html .= '<td>' . (is_numeric($row->saldo) ? number_format(($row->saldo-$row->keluar_sd), 2, '.', '') : '0') . '</td>';
				$html .= '</tr>';
			}
		} else {
			$html .= '<tr><td colspan="6">Data tidak ditemukan</td></tr>';
		}
		$html .= '</tbody></table></div>';

		return response($html);
	}

	public function getChartStokPupuk(Request $request)
	{
		$nama_pupuk = $request->input('nama_pupuk');
		if (empty($nama_pupuk)) {
			$nama_pupuk = '1';
		}

		$results = \DB::select("
			SELECT 
				l.kode_kebun,
				l.nama_kebun,
				k.nama,
				(
					(
						SELECT SUM(r.jumlah) 
						FROM t_penerimaan_pupuk_herbisida r 
						WHERE r.nama_barang = ? 
							AND LEFT(r.unit,4) = CONVERT(l.kode_kebun USING utf8mb4) COLLATE utf8mb4_unicode_ci
					) 
					- 
					(
						SELECT IFNULL(SUM(c.jumlah), 0) 
						FROM t_permintaan_pupuk_herbisida c 
						WHERE c.barang = ? 
							AND c.status = 3 
							AND LEFT(c.unit,4) = CONVERT(l.kode_kebun USING utf8mb4) COLLATE utf8mb4_unicode_ci
					)
					+ SUM(k.jml)
				) AS stok
			FROM master_kebun l
			LEFT JOIN (
				SELECT
					h.nama_kebun,
					a.id AS barang_id,
					d.kode_area,
					a.nama,
					IFNULL(SUM(f.jumlah),0)
					+ IFNULL((
						SELECT SUM(u.jumlah)
						FROM t_gudang_pupuk_transfer u
						WHERE u.barang = a.id
							AND u.dari_gudang = d.kode_area
							AND u.STATUS = 2
							AND CONVERT(LEFT(u.unit,4) USING utf8mb4) COLLATE utf8mb4_unicode_ci
								= CONVERT(h.kode_kebun USING utf8mb4) COLLATE utf8mb4_unicode_ci
					),0)
					- IFNULL((
						SELECT SUM(t.jumlah)
						FROM t_distribusi_pupuk_herbisida t
						WHERE t.barang = a.id
							AND t.area = d.kode_area
							AND t.STATUS = 2
							AND CONVERT(LEFT(t.unit,4) USING utf8mb4) COLLATE utf8mb4_unicode_ci
								= CONVERT(h.kode_kebun USING utf8mb4) COLLATE utf8mb4_unicode_ci
					),0) AS jml
				FROM vw_kebun_area d
				JOIN master_kebun h
					ON CONVERT(h.kode_kebun USING utf8mb4) COLLATE utf8mb4_unicode_ci
						= CONVERT(LEFT(d.kode_area,4) USING utf8mb4) COLLATE utf8mb4_unicode_ci
				INNER JOIN m_pupuk_herbisida a ON 0=0
				LEFT JOIN t_gudang_pupuk_area f
					ON d.kode_area = f.area AND a.id = f.barang
				WHERE CONVERT(LEFT(d.unit,4) USING utf8mb4) COLLATE utf8mb4_unicode_ci
						= CONVERT(h.kode_kebun USING utf8mb4) COLLATE utf8mb4_unicode_ci
					AND CONVERT(LEFT(d.kode_area,4) USING utf8mb4) COLLATE utf8mb4_unicode_ci
						= CONVERT(h.kode_kebun USING utf8mb4) COLLATE utf8mb4_unicode_ci
					AND a.id = ?
				GROUP BY a.id, d.kode_area
				ORDER BY d.kode_area, a.jenis DESC, a.id ASC
			) AS k
			ON l.kode_kebun = LEFT(k.kode_area,4)
			GROUP BY l.kode_kebun, l.nama_kebun
		", [$nama_pupuk, $nama_pupuk, $nama_pupuk]);

		$categories = [];
		$data = [];

		$namapupuk = "";
		foreach ($results as $row) {
			$categories[] = $row->nama_kebun;
			$data[] = round((float)$row->stok, 0);
			if(!empty($row->nama)) {
				$namapupuk = $row->nama;
			}
		}

		return response()->json([
			'categories' => $categories,
			'series' => [
				[
					'name' => $namapupuk,
					'data' => $data
				]
			]
		]);
	}
	

	public function dashboard($request){
														// config(['app.debug' => true]);
		if(!\Auth::check()) 
			return redirect('user/login')->with('status', 'error')->with('message','You are not login');

		$kode = $request->input('kode');
		if((session('gid') == 11 || session('gid') == 12)){
			$kode = substr(\Session::get('fid'), 0, 6);
		}

		if(session('gid') < 3){
			if(empty($kode)){ 
				$kode = 'SK09';
			}else{
				$kode = $request->input('kode');
			}
		}
		$tgl = $request->input('tanggal');
		$tgl = !empty($tgl) ? $tgl : date('Y-m-d');

		$this->data['kode'] = $kode;
		$this->data['saldo_pupuk'] = $this->model->saldo_pupuk($kode, $tgl);
		$this->data['ppk'] = $this->model->ppk($kode, $tgl);
		$this->data['total_ppk2'] = $this->model->total_ppk($kode, $tgl);
		$this->data['total_ppk'] = $this->model->total_ppk($kode, $tgl);
		$this->data['area'] = $this->model->area($kode);	
		return view('gudangarea.dashboard',$this->data);
	}

	public function getTransferPupukTable(Request $request)
	{
		$tgl1 = $request->input('tgl1');
		$tgl2 = $request->input('tgl2');
		$material = $request->input('material');
		$kode = $request->input('kode');
		if((session('gid') == 11 || session('gid') == 12)){
			$kode = substr(\Session::get('fid'), 0, 6);
		}
		$results = \DB::select("
			SELECT 
				a.dari_gudang,
				b.nama_area AS nama_dari,
				a.kepada_gudang,
				c.nama_area AS nama_kepada,
				SUM(a.jumlah) AS jml
			FROM t_gudang_pupuk_transfer a
			JOIN m_area_kebun b ON a.dari_gudang = b.kode_area
			JOIN m_area_kebun c ON a.kepada_gudang = c.kode_area
			WHERE a.unit like '".$kode."%'
				AND a.kepada_gudang IS NOT NULL
				AND a.barang = '".$material."'
				AND DATE(a.tgl_transfer) BETWEEN '".$tgl1."' AND '".$tgl2."'
			GROUP BY a.dari_gudang, a.kepada_gudang
		");

		// Prepare data for matrix: x = nama_kepada, y = nama_dari, value = jml
		$xLabels = [];
		$yLabels = [];
		$matrix = [];

		foreach ($results as $row) {
			$x = $row->nama_kepada ?? '';
			$y = $row->nama_dari ?? '';
			$val = is_numeric($row->jml) ? (float)$row->jml : 0;

			if (!in_array($x, $xLabels)) $xLabels[] = $x;
			if (!in_array($y, $yLabels)) $yLabels[] = $y;

			$matrix[$y][$x] = $val;
		}

		// Ensure all combinations exist (fill with 0 if missing)
		foreach ($yLabels as $y) {
			foreach ($xLabels as $x) {
				if (!isset($matrix[$y][$x])) {
					$matrix[$y][$x] = 0;
				}
			}
		}

		// Sort labels for consistent output
		sort($xLabels);
		sort($yLabels);

		// Build HTML table
		$html = '<style>
			.transfer-matrix-table {
				border-collapse: collapse;
				width: 100%;
				background: #fff;
				margin-bottom: 1rem;
			}
			.transfer-matrix-table th, .transfer-matrix-table td {
				border: 1px solid #ddd;
				padding: 8px 12px;
				border: 1px solid #22c55e;
			}
			.transfer-matrix-table th {
				color: #fff;
				background: #075c77;

				position: sticky;
				top: 0;
				z-index: 2;
				border: 1px solid #22c55e;
			}
			.head-penerima{
			    background: #f9a8d4;
				color: #b91c1c;
				}	
			.transfer-matrix-table tr:nth-child(even) {
				background: #f2f9ff;
			}
			.transfer-matrix-table tr:hover td {
				background: #ffe082;
				border: 1px solid #22c55e;
			}
		</style>';
		$html .= '<div style="overflow-x:auto"><table class="transfer-matrix-table">';
		$html .= '<thead><tr><th>Gudang</th>';
		foreach ($xLabels as $x) {
			$html .= '<td class="head-penerima">' . htmlspecialchars($x) . '</td>';
		}
		$html .= '</tr></thead><tbody>';
		foreach ($yLabels as $y) {
			$html .= '<tr><th style="background:#eaf6fb;color:#333;">' . htmlspecialchars($y) . '</th>';
			foreach ($xLabels as $x) {
				$val = $matrix[$y][$x];
				if ($val < 0) {
					$html .= '<td><span style="color:#dc2626;">&#8722; ' . number_format(abs($val), 2, '.', ',') . ' <i class="fa fa-arrow-down" title="Kurang"></i></span></td>';
				} elseif ($val > 0) {
					$html .= '<td><span style="color:#16a34a;">&#43; ' . number_format($val, 2, '.', ',') . ' <i class="fa fa-arrow-up" title="Tambah"></i></span></td>';
				} else {
					$html .= '<td>-</td>';
				}
			}
			$html .= '</tr>';
		}
		$html .= '</tbody></table></div>';

		return response($html);
	}

	public function getTransferPupukTableRayon(Request $request)
	{
																// config(['app.debug' => true]);
		$tgl1 = $request->input('tgl1');
		$tgl2 = $request->input('tgl2');
		$material = $request->input('material');
		$kode = $request->input('kode');
		if((session('gid') == 11 || session('gid') == 12)){
			$kode = substr(\Session::get('fid'), 0, 6);
		}
		$results = \DB::select("
			select 
				a.unit,
				c.nama_rayon as nama_dari,
				a.gudang,
				b.nama_rayon as nama_kepada,
				sum(a.jumlah) as jml
			from 
				t_penerimaan_pupuk_herbisida a
			join master_rayon b on a.gudang = b.kode_rayon COLLATE utf8mb4_general_ci
			join master_rayon c on a.unit = c.kode_rayon COLLATE utf8mb4_general_ci
			where a.unit like '".$kode."%' 
				and a.gudang is not null 
				and a.gudang != 1
				and a.nama_barang = '".$material."' 
				and date(a.tgl_pengiriman) between '".$tgl1."' and '".$tgl2."'
			group by a.unit, a.gudang
		");

		// Prepare data for matrix: x = nama_kepada, y = nama_dari, value = jml
		$xLabels = [];
		$yLabels = [];
		$matrix = [];

		foreach ($results as $row) {
			$x = $row->nama_kepada ?? '';
			$y = $row->nama_dari ?? '';
			$val = is_numeric($row->jml) ? (float)$row->jml : 0;

			if (!in_array($x, $xLabels)) $xLabels[] = $x;
			if (!in_array($y, $yLabels)) $yLabels[] = $y;

			$matrix[$y][$x] = $val;
		}

		// Ensure all combinations exist (fill with 0 if missing)
		foreach ($yLabels as $y) {
			foreach ($xLabels as $x) {
				if (!isset($matrix[$y][$x])) {
					$matrix[$y][$x] = 0;
				}
			}
		}

		// Sort labels for consistent output
		sort($xLabels);
		sort($yLabels);

		// Build HTML table
		$html = '<style>
			.transfer-matrix-table {
				border-collapse: collapse;
				width: 100%;
				background: #fff;
				margin-bottom: 1rem;
			}
			.transfer-matrix-table th, .transfer-matrix-table td {
				border: 1px solid #ddd;
				padding: 8px 12px;
				border: 1px solid #22c55e;
			}
			.transfer-matrix-table th {
				color: #fff;
				background: #075c77;

				position: sticky;
				top: 0;
				z-index: 2;
				border: 1px solid #22c55e;
			}
			.head-penerima{
			    background: #f9a8d4;
				color: #b91c1c;
				}	
			.transfer-matrix-table tr:nth-child(even) {
				background: #f2f9ff;
			}
			.transfer-matrix-table tr:hover td {
				background: #ffe082;
				border: 1px solid #22c55e;
			}
		</style>';
		$html .= '<div style="overflow-x:auto"><table class="transfer-matrix-table">';
		$html .= '<thead><tr><th>Gudang</th>';
		foreach ($xLabels as $x) {
			$html .= '<td class="head-penerima">' . htmlspecialchars($x) . '</td>';
		}
		$html .= '</tr></thead><tbody>';
		foreach ($yLabels as $y) {
			$html .= '<tr><th style="background:#eaf6fb;color:#333;">' . htmlspecialchars($y) . '</th>';
			foreach ($xLabels as $x) {
				$val = $matrix[$y][$x];
				if ($val < 0) {
					$html .= '<td><span style="color:#dc2626;">&#8722; ' . number_format(abs($val), 2, '.', ',') . ' <i class="fa fa-arrow-down" title="Kurang"></i></span></td>';
				} elseif ($val > 0) {
					$html .= '<td><span style="color:#16a34a;">&#43; ' . number_format($val, 2, '.', ',') . ' <i class="fa fa-arrow-up" title="Tambah"></i></span></td>';
				} else {
					$html .= '<td>-</td>';
				}
			}
			$html .= '</tr>';
		}
		$html .= '</tbody></table></div>';

		return response($html);
	}

	public function getDistribusiPupukTable(Request $request)
	{
																	// config(['app.debug' => true]);
		$tgl1 = $request->input('tgl1');
		$tgl2 = $request->input('tgl2');
		$material = $request->input('material');
		$kode = $request->input('kode');
		if((session('gid') == 11 || session('gid') == 12)){
			$kode = substr(\Session::get('fid'), 0, 6);
		}else if(session('gid') == 3){
			$kode = substr(\Session::get('fid'), 0, 4);
		}

		$query = \DB::table('t_distribusi_pupuk_herbisida as a')
			->join('m_petak_pupuk as b', 'a.petak', '=', 'b.lahan_id')
			->join('m_pupuk_herbisida as c', 'c.id', '=', 'a.barang')
			->select(
				\DB::raw('concat(a.barang,UNIX_TIMESTAMP(a.tgl_input)) as nodoc'),
				\DB::raw('GROUP_CONCAT(a.id) as id_lahan'),
				'a.area',
				'a.tanggal',
				'c.nama as barang',
				'c.kode_material',
				\DB::raw('SUM(a.jumlah) as jumlah'),
				'a.satuan',
				'b.kode_petak_sap',
				'b.project_def_sap',
				'a.aktifitas',
				'b.deskripsi_kebun',
				'a.status_sap',
				'b.luas'
			)
			->where('a.status', 2)
			->where('a.unit', 'like', $kode . '%');
			if (!empty($material)) {
				$query->where('a.barang', $material);
			}

		if ($tgl1 && $tgl2) {
			$query->whereBetween('a.tanggal', [$tgl1, $tgl2]);
		}

		$query->groupBy('b.project_def_sap','b.kode_petak_sap', 'a.barang');

		$results = $query->get();

		$html = '<style>
			.distribusi-table { border-collapse: collapse; width: 100%; background: #fff; }
			.distribusi-table th, .distribusi-table td { border: 1px solid #ddd; padding: 8px 12px; }
			.distribusi-table th { background: #2193b0; color: #fff; }
			.distribusi-table tr:nth-child(even) { background: #f2f9ff; }
			.distribusi-table tr:hover td { background: #ffe082; }
		</style>';
		$html .= '<div style="overflow-x:auto"><table class="distribusi-table">';
		$html .= '<thead><tr>
			<th class="bg-danger"><input type="checkbox" class="form-check-input filled-in"  id="selectAll">  <label for="selectAll" class="form-check-label"> Pilih Semua</label></th>
			<th>No. Dokumen</th>
			<th>Area</th>
			<th>Tanggal</th>
			<th>Barang</th>
			<th>Kode Material</th>
			<th>Jumlah</th>
			<th>Satuan</th>
			<th>Kode Petak SAP</th>
			<th>Project Def SAP</th>
			<th>Aktifitas</th>
			<th>WBS</th>
			<th>Deskripsi Kebun</th>
			<th>Luas</th>
			<th>Status SAP</th>
		</tr></thead><tbody>';

		if (count($results) > 0) {
			foreach ($results as $key => $row) {
				$html .= '<tr>';
				$html .= '<td style="text-align:center;">';
				if($row->status_sap == 1){
					$html .= '<input class="form-check-input" type="checkbox" style="display:none;" value="' . htmlspecialchars($row->status_sap) . '" id="flexCheckDefault_' . htmlspecialchars($row->kode_petak_sap).$key . '" checked disabled>
					<label class="form-check-label" for="flexCheckDefault_' . htmlspecialchars($row->kode_petak_sap).$key . '">
					</label>
					<input type="hidden" name="id_lahan[]" value="' . htmlspecialchars($row->id_lahan) . '">';					
				} else{
					$html .= '<input class="form-check-input" type="checkbox" style="display:none;" value="' . htmlspecialchars($row->status_sap) . '" id="flexCheckDefault_' . htmlspecialchars($row->kode_petak_sap).$key . '" ' . ($row->status_sap == 1 ? 'checked' : '') . '>
					<label class="form-check-label" for="flexCheckDefault_' . htmlspecialchars($row->kode_petak_sap).$key . '">
					</label>
					<input type="hidden" name="id_lahan[]" value="' . htmlspecialchars($row->id_lahan) . '">';
				}

				$html .= '</td>';
				$html .= '<td>' . htmlspecialchars($row->nodoc) . '</td>';
				$html .= '<td>' . htmlspecialchars($row->area) . '</td>';
				$html .= '<td>' . htmlspecialchars($row->tanggal) . '</td>';
				$html .= '<td>' . htmlspecialchars($row->barang) . '</td>';
				$html .= '<td>' . htmlspecialchars($row->kode_material) . '</td>';
				$html .= '<td>' . number_format($row->jumlah, 2, '.', ',') . '</td>';
				$html .= '<td>' . htmlspecialchars($row->satuan) . '</td>';
				$html .= '<td>' . htmlspecialchars($row->kode_petak_sap) . '</td>';
				$html .= '<td>' . htmlspecialchars($row->project_def_sap) . '</td>';
				$html .= '<td>' . htmlspecialchars($row->aktifitas) . '</td>';
				// Format WBS: ambil 4 digit terakhir, lalu pisah jadi 2-2 digit (misal: 60701 -> 07-01)
				$wbs = $row->aktifitas ?? '';
				$wbsFormatted = '-';
				if (!empty($wbs) && strlen($wbs) >= 4) {
					$last4 = substr($wbs, -4);
					$wbsFormatted = substr($last4, 0, 2) . '-' . substr($last4, 2, 2);
				}
				$html .= '<td>' . $row->project_def_sap."-".$wbsFormatted . '</td>';
				$html .= '<td>' . htmlspecialchars($row->deskripsi_kebun) . '</td>';
				$html .= '<td>' . number_format($row->luas, 2, '.', ',') . '</td>';
				$statusSap = $row->status_sap;
				if ($statusSap == 1) {
					$html .= '<td><span style="background:#bbf7d0;color:#166534;padding:4px 10px;border-radius:6px;font-weight:600;">Terupload SAP</span></td>';
				} else {
					$html .= '<td><span style="background:#fee2e2;color:#b91c1c;padding:4px 10px;border-radius:6px;font-weight:600;">Belum</span></td>';
				}
				$html .= '</tr>';
			}
		} else {
			$html .= '<tr><td colspan="13">Data tidak ditemukan</td></tr>';
		}

		$html .= '</tbody></table></div>';

		$html .= '
		<script>

		document.getElementById("selectAll").addEventListener("change", function() {
			var checkboxes = document.querySelectorAll(".distribusi-table input[type=checkbox]");
			checkboxes.forEach(function(checkbox) {
				checkbox.checked = event.target.checked;
			});
		});

		function getmodaldistribusi() {
				var checkedRows = [];
					document.querySelectorAll(".distribusi-table tbody tr").forEach(function(tr) {
						var cb = tr.querySelector("input[type=checkbox]");
						// Only push if checkbox exists, is checked, and NOT disabled
						if (cb && cb.checked && !cb.disabled) {
							var rowData = [];
							tr.querySelectorAll("td,th").forEach(function(td, idx) {
								if (idx > 0) rowData.push(td.innerText);
							});
							checkedRows.push(rowData);
					 }
					});
					var modalContent = document.getElementById("sximo-modal-content2");

					document.getElementById("exampleModalLabel2").innerText = "Data Distribusi untuk di upload ke SAP";
					if (checkedRows.length === 0) {
						modalContent.innerHTML = "<p>Tidak ada data terpilih.</p>";
					} else {
						var html = `
							<style>
								.modal-table {
									width: 100%;
									border-collapse: collapse;
									margin-bottom: 1rem;
									background: #fff;
									border-radius: 10px;
									box-shadow: 0 2px 8px rgba(0,0,0,0.07);
									overflow: hidden;
								}
								.modal-table th, .modal-table td {
									border: 1px solid #ddd;
									padding: 10px 14px;
									text-align: left;
									transition: background 0.2s;
								}
								.modal-table th {
									background: linear-gradient(90deg, #ff9966 0%, #ff5e62 100%);
									color: #fff;
									font-weight: 600;
									letter-spacing: 0.5px;
								}
								.modal-table tr:nth-child(even) {
									background: #fff8f4;
								}
								.modal-table tr:nth-child(odd) {
									background: #ffe5d0;
								}
								.modal-table tr:hover td {
									background: #ffe082;
								}
							</style>
							<table class="modal-table">
							<thead>
								<tr>
									<th>No. Dokumen</th>
									<th>Area</th>
									<th>Tanggal</th>
									<th>Barang</th>
									<th>Kode Material</th>
									<th>Jumlah</th>
									<th>Satuan</th>
									<th>Kode Petak SAP</th>
									<th>Project Def SAP</th>
									<th>Aktifitas</th>
									<th>WBS</th>
									<th>Deskripsi Kebun</th>
									<th>Luas</th>
									<th>Status SAP</th>
								</tr>
							</thead>
							<tbody>
						`;
						checkedRows.forEach(function(row) {
							html += "<tr>";
							row.forEach(function(cell, idx) {
								if (idx === row.length - 1) {
									// Status SAP column
									if (cell.trim().toLowerCase().includes("terupload")) {
										html += "<td style=\'border:1px solid #ddd;padding:10px 14px;\'><span style=\'background:#bbf7d0;color:#166534;padding:4px 10px;border-radius:6px;font-weight:600;\'>" + cell + "</span></td>";
									} else {
										html += "<td style=\'border:1px solid #ddd;padding:10px 14px;\'><span style=\'background:#fee2e2;color:#b91c1c;padding:4px 10px;border-radius:6px;font-weight:600;\'>" + cell + "</span></td>";
									}
								} else {
									html += "<td style=\'border:1px solid #ddd;padding:10px 14px;\'>" + cell + "</td>";
								}
							});
							html += "</tr>";
						});
						html += `<tbody><tfoot><tr>
							<td colspan="14" style="text-align:right;padding:12px 0;">
								<button id="btnSetSAP" onclick="getSelectedLahan()" class="btn btn-warning btn-sm" style="padding:8px 18px;font-weight:600;border-radius:6px;">
									<i class="fa fa-upload"></i> Set untuk Upload ke SAP
								</button>
									
							</td>
						</tr></tfoot>`;
						html += "</table>";
						
						modalContent.innerHTML = html;
					}
					$("#sximo-modal2").modal("show");
		}

		function getSelectedLahan() {
			var idLahanList = [];
			console.log("Tombol Set untuk Upload ke SAP diklik");
			document.querySelectorAll(".distribusi-table tbody tr").forEach(function(tr) {
				var cb = tr.querySelector("input[type=checkbox]");
				if (cb && cb.checked) {
					var hiddenInput = tr.querySelector("input[type=hidden][name=\'id_lahan[]\']");
					if (hiddenInput) {
						idLahanList.push(hiddenInput.value);
					}
				}
			});
			if (idLahanList.length === 0) {
				alert("Tidak ada data terpilih.");
				return;
			}
			if (confirm("Apakah Anda yakin ingin mengupload data terpilih ke SAP?")) {
				// Kirim data via AJAX atau proses selanjutnya
				console.log("Selected id_lahan:", idLahanList);
				// TODO: AJAX call here
				$.ajax({
					url: "' . url('gudangarea/?action_task=setuploadsap') . '",
					type: "POST",
					data: {
						ids: idLahanList,
						_token: "' . csrf_token() . '"
					},
					success: function(response) {
						var res = JSON.parse(response);
						if (res.success) {
							alert(res.message);
							location.reload();
						} else {
							alert("Error: " + res.message);
						}
					},
					error: function(xhr, status, error) {
						alert("AJAX Error: " + error);
					}
				});
			}
		}

	
		</script>';

		return response($html);
	}

	public function setuploadsap($request){
		config(['app.debug' => true]);
		$idArrays = $request->input('ids'); // expects array of comma-separated strings
		$allIds = [];
		if (is_array($idArrays)) {
			foreach ($idArrays as $ids) {
				$idsArr = array_filter(explode(',', $ids));
				$allIds = array_merge($allIds, $idsArr);
			}
		}
		if (!empty($allIds)) {
			\DB::table('t_distribusi_pupuk_herbisida')
				->whereIn('id', $allIds)
				->update(['status_sap' => 1]);
			$data['success'] = true;
			$data['message'] = 'Status SAP berhasil diupdate.';
		} else {
			$data['success'] = false;
			$data['message'] = 'Tidak ada data terpilih.';
		}
		echo json_encode($data);
	}



	public function pengeluaran_pupuk_daerah($request){
		$tgl1 = $request->input('tgl1');
		$tgl2 = $request->input('tgl2');
		$kode = $request->input('kode');
		$data['pupuk'] = $this->model->saldo_pupuk_daerah($tgl1, $tgl2, $kode);
		$data['total'] = $this->model->saldo_pupuk_daerah_total($tgl1, $tgl2, $kode);
		echo json_encode($data);
	}
}