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

use App\Http\Controllers\Controller;
use App\Models\Lkpreport;
use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator as Paginator;
use Illuminate\Support\Facades\DB;
use Validator, Input, Redirect ; 


class LkpreportController extends Controller {

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

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

	public function index( Request $request )
	{
		// Make Sure users Logged 			
		$this->grabApi( $request , 'api') ;		
		if($this->access['is_view'] ==0) 
			 return response()->json(array('status'=>'error' , 'data' =>  __('core.note_restric') ));
		// Render into json 
		 return response()->json(array('status'=>'success' , 'data' => (array) $this->data ));
	}	

	function create( Request $request , $id =0 ) 
	{
		$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['id'] = '';
		return response()->json(array('status'=>'success' , 'data' => $this->data ));
	}
	function edit( Request $request , $id ) 
	{
		$this->hook( $request , $id );
		if(!isset($this->data['row']))
			return response()->json(array('status'=>'error' , 'message' => 'Record Not Found !' ));

		if($this->access['is_edit'] ==0 )
			return response()->json(array('status'=>'error' , 'message' => __('core.note_restric') ));

		$this->data['row'] = (array) $this->data['row'];
		
		$this->data['id'] = $id;
		return response()->json(array('status'=>'success' , 'data' => $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 );
				break;
			case 'export':
				return $this->getExport( $request );
				break;
			case 'map':
				return $this->map($request);
				 break;	
			default:
				$this->hook( $request , $id );
				if(!isset($this->data['row']))
					return response()->json(array('status'=>'error' , 'message' => 'Record Not Found !' ));

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

				return response()->json(array('status'=>'success' , 'data' => $this->data ));
				break;		
		}
	}
	function store( Request $request  )
	{
		$task = $request->input('action_task');
		switch ($task)
		{
			default:
				$rules = $this->validateForm();
				$validator = Validator::make($request->all(), $rules);
				if ($validator->passes()) 
				{
					$data = $this->validatePost( $request );
					$id = $this->model->insertRow($data , $request->input( $this->info['key']));
					
					/* Insert logs */
					$this->model->logs($request , $id);
					return response()->json( ['status'=> 'success','message' => __('core.note_success') ] );
				} 
				else {
					return response()->json( ['status'=> 'error','message' => __('core.note_error') ] );

				}
				break;

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

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

			case 'copy':
				$result = $this->copy( $request );
				return response()->json(array('status'=>'success'  ));
				break;		
			case 'cekmapidlahancluster':
				return $this->cekmapidlahancluster($request);
				break;
			case 'cekmapidlahannonfilter':
				return $this->cekmapidlahannonfilter($request);
				break;
			case 'cekmapidlahan':
				return $this->cekmapidlahan($request);
				break;
			case 'cekmapidlahanlkp':
				return $this->cekmapidlahanlkp($request);
				break;	
		}	
	
	}	

	public function destroy( $request)
	{
		// Make Sure users Logged 
		if(!\Auth::check()) 
			return ['message'=>__('core.note_restric'),'status'=>'error'];
			

		$this->access = $this->model->validAccess($this->info['id'] , session('gid'));
		if($this->access['is_remove'] ==0)
			return ['message'=>__('core.note_restric'),'status'=>'error']; 
			
		// delete multipe rows 
		if(count($request->input('ids')) >=1)
		{
			$this->model->destroy($request->input('ids'));
			
			\SiteHelpers::auditTrail( $request , "ID : ".implode(",",$request->input('ids'))."  , Has Been Removed Successfull");
			// redirect
        	return ['message'=>__('core.note_success_delete'),'status'=>'success'];	
	
		} else {
			return ['message'=>__('No Item Deleted'),'status'=>'error'];				
		}

	}		

	public function map(request $request){
		config(['app.debug' => true]);
		$fileMap = DB::table('master_peta_kebun')->select('file_map', 'updatedOn')->first();
		$this->data['file_map'] = $fileMap->file_map;
		$this->data['file_map_updatedOn'] = date('d-m-Y H:i:s', strtotime($fileMap->updatedOn));
		$this->data['thntnm'] = $request->header('thntnm', '2526');		
		$this->data['content'] = view('petakebun.indexapi', $this->data)->render();
		return view( 'masterkonten.page',$this->data);
	}

	public function map2(request $request){
		config(['app.debug' => true]);
		$fileMap = DB::table('master_peta_kebun')->select('file_map', 'updatedOn')->first();
		$this->data['file_map'] = $fileMap->file_map;
		$this->data['file_map_updatedOn'] = date('d-m-Y H:i:s', strtotime($fileMap->updatedOn));
		$this->data['thntnm'] = $request->header('thntnm', '2627');		
		$this->data['content'] = view('petakebun.indexapi', $this->data)->render();
		return view( 'masterkonten.page',$this->data);
	}

	public function cekmapidlahancluster(request $request){
		$lahanIds = $request->input('lahan_ids');

		
		
			// Panggil stored procedure dan filter hasil berdasarkan lahanIds
			$spResults = DB::select("CALL sp_console_spta_petak_petakebun(?)", [date('Y-m-d', strtotime('-1 day'))]);
			// ubah hasil menjadi collection dan filter berdasarkan input lahan ids
			$datapetak = collect($spResults)->whereIn('lahan_id', $lahanIds);

		

		$response = [];
		if ($datapetak->isNotEmpty()) {
			foreach ($datapetak as $data) {
					switch ($data->clusterisasi) {
						case 'HIJAU':
							$response[$data->lahan_id] = 'green';
							break;
						case 'KUNING':
							$response[$data->lahan_id] = 'yellow';
							break;
						case 'MERAH':
							$response[$data->lahan_id] = 'red';
							break;
						case 'EMAS':
							$response[$data->lahan_id] = 'gold';
							break;	
						case 'HITAM':
							$response[$data->lahan_id] = 'black';
							break;
						case 'PLATINUM':
							$response[$data->lahan_id] = 'platinum';
							break;
						default:
							$response[$data->lahan_id] = 'blue';
					}
			}
		}

	
		return response()->json($response);
	}
	public function cekmapidlahannonfilter(request $request){
		$lahanIds = $request->input('lahan_ids');

		
			// Ambil data dan group by lahan_id
			$datapetak = DB::table('q_detail_petak_pekerjaan')
				->whereIn('lahan_id', $lahanIds);

				
	
			$html = '';
			$response = [];
			// dd($datapetak->get());
			if ($datapetak->get()->isNotEmpty()) {
				// Ambil hanya lahan_id pertama yang ditemukan
				$firstLahanId = $datapetak->first()->lahan_id;
				$rows = $datapetak->where('lahan_id', $firstLahanId)->get();

				$html .= '<div class="row">';
				$html .= '<div class="col-lg-6">';
				$html .= '<table style="border-collapse:collapse;width:100%;box-shadow:0 2px 8px rgba(0,0,0,0.07);font-size:12px;">';
				$html .= '<tbody>';

				// Siapkan data chart
				$chartLabels = [];
				$chartFotos = [];
				$chartData = [];
				$luasPolig = 0;
				foreach ($rows as $row) {
					$nohp = DB::table('master_nohp')
					->join('master_afd', 'master_afd.kode_afd', '=', 'master_nohp.afdeling')
					->where('master_nohp.afdeling', $row->kode_afd)
					->select('master_nohp.nama', 'master_nohp.nohp', 'master_afd.nik')
					->first();
					
					// Foto Asman
					$fotoAsmanPath = !empty($nohp->nik) && file_exists(public_path('uploads/foto_asman/' . $nohp->nik . '.jpg'))
						? 'uploads/foto_asman/' . $nohp->nik . '.jpg'
						: 'uploads/foto_asman/avatar.png';
					$fotoAsmanUrl = url($fotoAsmanPath);

					if ($nohp && !empty($nohp->nohp)) {
						$rawNumber = trim($nohp->nohp);
						$displayNumber = htmlspecialchars($rawNumber);
						$digits = preg_replace('/\D+/', '', $rawNumber);
						if (strpos($digits, '0') === 0) {
							$waNumber = '62' . substr($digits, 1);
						} else {
							$waNumber = ltrim($digits, '+');
						}
						$telHref = 'tel:' . $digits;
						$waHref = 'https://wa.me/' . $waNumber;

						$phoneLinks = '';
					} else {
						$phoneLinks = '';
					}

					$html .= '<tr><td colspan="2" style="padding:10px 0;text-align:center;border-bottom:1px solid #e3e3e3;">' . $phoneLinks . '</td></tr>';
					$html .= '<tr><td style="padding:7px 12px;border-bottom:1px solid #e3e3e3;font-weight:bold;white-space:nowrap;">Nama Asman</td><td style="padding:7px 12px;border-bottom:1px solid #e3e3e3;">' . htmlspecialchars($row->nama_asman) . '</td></tr>';
					$html .= '<tr><td style="padding:7px 12px;border-bottom:1px solid #e3e3e3;font-weight:bold;white-space:nowrap;">Lahan ID</td><td style="padding:7px 12px;border-bottom:1px solid #e3e3e3;">' . htmlspecialchars($row->lahan_id) . '</td></tr>';
					$html .= '<tr><td style="padding:7px 12px;border-bottom:1px solid #e3e3e3;font-weight:bold;white-space:nowrap;">Cluster</td><td style="padding:7px 12px;border-bottom:1px solid #e3e3e3;">' . htmlspecialchars($row->cluster) . '</td></tr>';
					$html .= '<tr><td style="padding:7px 12px;border-bottom:1px solid #e3e3e3;font-weight:bold;white-space:nowrap;">Kebun</td><td style="padding:7px 12px;border-bottom:1px solid #e3e3e3;">' . htmlspecialchars($row->kebun) . '</td></tr>';
					$html .= '<tr><td style="padding:7px 12px;border-bottom:1px solid #e3e3e3;font-weight:bold;white-space:nowrap;">Kode Rayon</td><td style="padding:7px 12px;border-bottom:1px solid #e3e3e3;">' . htmlspecialchars($row->kode_rayon) . '</td></tr>';
					$html .= '<tr><td style="padding:7px 12px;border-bottom:1px solid #e3e3e3;font-weight:bold;white-space:nowrap;">Rayon</td><td style="padding:7px 12px;border-bottom:1px solid #e3e3e3;">' . htmlspecialchars($row->rayon) . '</td></tr>';
					$html .= '<tr><td style="padding:7px 12px;border-bottom:1px solid #e3e3e3;font-weight:bold;white-space:nowrap;">Nama Kebun</td><td style="padding:7px 12px;border-bottom:1px solid #e3e3e3;">' . htmlspecialchars($row->nama_kebun) . '</td></tr>';
					$html .= '<tr><td style="padding:7px 12px;border-bottom:1px solid #e3e3e3;font-weight:bold;white-space:nowrap;">Luas Poligon</td><td style="padding:7px 12px;border-bottom:1px solid #e3e3e3;">' . htmlspecialchars($row->luas_polig) . '</td></tr>';
					$html .= '<tr><td style="padding:7px 12px;border-bottom:1px solid #e3e3e3;font-weight:bold;white-space:nowrap;">Kategori</td><td style="padding:7px 12px;border-bottom:1px solid #e3e3e3;">' . htmlspecialchars($row->kategori_n) . '</td></tr>';
					$html .= '<tr><td style="padding:7px 12px;border-bottom:1px solid #e3e3e3;font-weight:bold;white-space:nowrap;">Bulan Tanam</td><td style="padding:7px 12px;border-bottom:1px solid #e3e3e3;">' . htmlspecialchars($row->bulan_tana) . '</td></tr>';
					$html .= '<tr><td style="padding:7px 12px;border-bottom:1px solid #e3e3e3;font-weight:bold;white-space:nowrap;">Afdeling</td><td style="padding:7px 12px;border-bottom:1px solid #e3e3e3;">' . htmlspecialchars($row->kode_afd) . '</td></tr>';
					
					$html .= '<tr><td style="padding:7px 12px;border-bottom:1px solid #e3e3e3;font-weight:bold;white-space:nowrap;">Faktor Juring</td><td style="padding:7px 12px;border-bottom:1px solid #e3e3e3;">' . htmlspecialchars($row->faktor_juring_perha) . '</td></tr>';
					// Data untuk chart

					$rekapTimbangan = DB::table('v_rekap_timbangan_petak_petakebun')
						->where('lahan_id', $row->lahan_id)
						->first();

					$taksasi = DB::table('q_takdes_petak')
						->where('lahan_id', $row->lahan_id)
						->first();
						

					//data aff diambil dari ini CALL sp_rekap_timbangan_petak_sd_petakebun('24198687','2026-08-10');
					$afftebang = DB::select("CALL sp_rekap_timbangan_petak_sd_petakebun(?, ?)", [$row->lahan_id, date('Y-m-d')]);
					
 

					$html .= '<tr><td style="padding:7px 12px;border-bottom:1px solid #e3e3e3;font-weight:bold;white-space:nowrap;">Taksasi (Ton/Ha)</td><td style="padding:7px 12px;border-bottom:1px solid #e3e3e3;">' . ($taksasi->takdes_tonperha ?? '-') . '</td></tr>';
					$html .= '<tr><td style="padding:7px 12px;border-bottom:1px solid #e3e3e3;font-weight:bold;white-space:nowrap;">Pra Tebang (Ton/Ha)</td><td style="padding:7px 12px;border-bottom:1px solid #e3e3e3;">' . ($rekapTimbangan->protas_pratebang ?? '-') . '</td></tr>';
					$html .= '<tr><td style="padding:7px 12px;border-bottom:1px solid #e3e3e3;font-weight:bold;white-space:nowrap;">Real Ha (Ha)</td><td style="padding:7px 12px;border-bottom:1px solid #e3e3e3;">' . ($rekapTimbangan->ha_tebang_sd ?? '-') . '</td></tr>';
					$html .= '<tr><td style="padding:7px 12px;border-bottom:1px solid #e3e3e3;font-weight:bold;white-space:nowrap;">Real Tebu (Ton)</td><td style="padding:7px 12px;border-bottom:1px solid #e3e3e3;">' . ($rekapTimbangan->netto_ton_sd ?? '-') . '</td></tr>';
					$html .= '<tr><td style="padding:7px 12px;border-bottom:1px solid #e3e3e3;font-weight:bold;white-space:nowrap;">Real Protas (Ton/Ha)</td><td style="padding:7px 12px;border-bottom:1px solid #e3e3e3;">' . ($rekapTimbangan->protas_sd ?? '-') . '</td></tr>';
					$html .= '<tr><td style="padding:7px 12px;border-bottom:1px solid #e3e3e3;font-weight:bold;white-space:nowrap;">Real Rendemen (%)</td><td style="padding:7px 12px;border-bottom:1px solid #e3e3e3;">' . ($rekapTimbangan->rendemen_sd ?? '-') . '</td></tr>';
					$affStatus = '-';
					if (!empty($afftebang) && isset($afftebang[0]->aff_tebang, $afftebang[0]->tgl_aff)) {
						$affStatus = $afftebang[0]->aff_tebang . ' (' . date('d-m-Y', strtotime($afftebang[0]->tgl_aff)) . ')';
					}
					$html .= '<tr><td style="padding:7px 12px;border-bottom:1px solid #e3e3e3;font-weight:bold;white-space:nowrap;">Status AFF </td><td style="padding:7px 12px;border-bottom:1px solid #e3e3e3;">' . $affStatus . '</td></tr>';
					$persenTakdes = ($rekapTimbangan && $rekapTimbangan->takdes_tonperha > 0 && $rekapTimbangan->protas_sd > 0)
						? round(($rekapTimbangan->protas_sd / $rekapTimbangan->takdes_tonperha) * 100, 2)
						: 0;
					$persenPratebang = ($rekapTimbangan && $rekapTimbangan->protas_pratebang > 0 && $rekapTimbangan->protas_sd > 0)
						? round(($rekapTimbangan->protas_sd / $rekapTimbangan->protas_pratebang) * 100, 2)
						: 0;

					// Progress bar style
					function progressBar($percent, $label) {
						$barWidth = min($percent, 100);
						$r = round(255 - (255 * ($barWidth / 100)));
						$g = round(0 + (200 * ($barWidth / 100)));
						$b = 0;
						$barColor = "rgb($r,$g,$b)";
						return '<div style="margin:4px 0 8px 0;">
							<div style="font-size:12px;font-weight:bold;margin-bottom:2px;">' . $label . '</div>
							<div style="background:#b1afaf;width:100%;height:18px;border-radius:3px;position:relative;max-width:220px;">
								<div style="background:' . $barColor . ';height:18px;width:' . $barWidth . '%;min-width:2px;border-radius:3px;position:absolute;top:0;left:0;display:flex;align-items:center;justify-content:flex-end;"></div>
								<span style="position: absolute; right: 0; font-size: 11px; color: #fff2f2; font-weight: bold; padding-right: 6px">' . $percent . '%</span>
							</div>
						</div>';
					}

					$html .= '<tr><td colspan="2" style="padding:7px 12px;border-bottom:1px solid #e3e3e3;">'
						. progressBar($persenTakdes, '% Taksasi')
						. progressBar($persenPratebang, '% Pra tebang')
						. '</td></tr>';

					$luasPolig = $row->luas_polig;
				}
				$html .= '</tbody></table>';
					$protasMorfologi = collect(DB::select('
						select x.* from ( SELECT
						tm.tanggal,
						(mp.faktor_juring_perha * tm.jumlah_batang * mp.panjang_juring_m * tm.tinggi_batang * tm.berat_batang_per_meter) / 1000 as protas_morfologi,
						ss.protas_sasaran
					FROM master_petak mp
					JOIN q_lkp_rekap_id_lahan_pekerjaan tx ON tx.id_lahan = mp.lahan_id
					JOIN tx_morfologi tm ON tm.lahan_id = mp.lahan_id
					JOIN master_sasaran2526_petak ss ON ss.id_lahan = tm.lahan_id
					LEFT JOIN tb_users us ON us.id = tm.entry_by
					WHERE tm.lahan_id != 0 AND tm.lahan_id = ?
					ORDER BY tm.tanggal desc
					LIMIT 7) as x order by x.tanggal asc 
				', [$firstLahanId]));

					if ($protasMorfologi && $protasMorfologi->count() > 0) {
						$html .= '<div style="margin-top:18px;">';
						$html .= '<div style="font-weight:bold;margin-bottom:5px;">Grafik Protas Morfologi & Sasaran (7 Data Terakhir)</div>';
						$html .= '<div id="protasMorfologiHighchart" style="width:100%;max-width:600px;height:280px;"></div>';
						// Prepare data for Highcharts
						$labels = [];
						$data = [];
						$sasaran = [];
						foreach ($protasMorfologi as $row) {
							$labels[] = date('d-m-Y', strtotime($row->tanggal));
							$data[] = round($row->protas_morfologi, 2);
							$sasaran[] = is_numeric($row->protas_sasaran) ? round($row->protas_sasaran, 2) : null;
						}
						$response['labels'] = $labels;
						$response['data'] = $data;
						$response['sasaran'] = $sasaran;
						// Pastikan Highcharts sudah dimuat sebelum menjalankan script ini
						$html .= '<script>
	
						</script>';
						$html .= '</div>';
					}
				$html .= '</div><div class="col-lg-6">';
				$datapetak2 = DB::table('q_detail_petak_pekerjaan as a')
					->leftJoin(DB::raw('(SELECT no_pekerjaan, MAX(foto) AS last_foto FROM q_detail_petak_pekerjaan WHERE foto IS NOT NULL AND foto <> "" AND lahan_id IN (' . implode(',', $lahanIds) . ') AND ha_dikerjakan > 0 GROUP BY no_pekerjaan) b'), function($join) {
						$join->on('a.no_pekerjaan', '=', 'b.no_pekerjaan');
					})
					->where(function($query) use ($lahanIds) {
						$query->whereRaw('(a.foto = b.last_foto OR b.last_foto IS NULL)');
						$query->whereIn('a.lahan_id', $lahanIds);
						$query->where('a.ha_dikerjakan', '>', 0);
					})
					->get();

				foreach($datapetak2 as $row) {
					$chartLabels[] = $row->pekerjaan;
					$chartFotos[] = $row->foto;
					// Hitung prosentase ha_dikerjakan terhadap luas_polig
					$prosentase = ($luasPolig > 0) ? round(($row->ha_dikerjakan / $luasPolig) * 100, 2) : 0;
					$chartData[] = $prosentase;
					$luasdikerjakan[] = $row->ha_dikerjakan;
				}

				// Bar chart: prosentase ha_dikerjakan per pekerjaan, overlay target 100%
				$maxValue = 100;
				$html .= '';
				$html .= '';
			

				// Tambahkan foto morfologi jika ada
				$fotoMorfologi = DB::table('tx_morfologi')
					->where('lahan_id', $firstLahanId)
					->orderBy('createdOn', 'desc')
					->limit(3)
					->get();

				

				$response['protas_morfologi'] = $protasMorfologi;	

				if ($fotoMorfologi && $fotoMorfologi->count() > 0) {
					$html .= '<div style="margin-top:18px;">';
					$html .= '<div style="font-weight:bold;margin-bottom:5px;">Foto Morfologi</div>';
					// horizontal scroll container
					$html .= '<div style="display:flex;flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden;gap:8px;padding:8px 2px;-webkit-overflow-scrolling:touch;scrollbar-width:none;-ms-overflow-style:none;">';
					foreach ($fotoMorfologi as $foto) {
						$fotoMorfologiPath = $foto->foto;
						//$fotoMorfologiUrl = (strpos($fotoMorfologiPath, 'uploads/') === 0)
						//	? url($fotoMorfologiPath)
						//	: url('uploads/foto_morfologi/' . $fotoMorfologiPath);
						$localMorfologi = public_path('uploads/foto_morfologi/' . $fotoMorfologiPath);
						$localMorfologiUrl = url('uploads/foto_morfologi/' . $fotoMorfologiPath);
						$cdnMorfologiUrl = 'https://asset.nikochannel.com/uploads/foto_morfologi/thumb_' . $fotoMorfologiPath;

						$fotoMorfologiUrl = file_exists($localMorfologi)
							? $localMorfologiUrl
							: $cdnMorfologiUrl;

							if(!empty($fotoMorfologiPath)){
								$html .= '<div style="flex:0 0 auto;">';
								$html .= '<img src="' . $fotoMorfologiUrl . '" alt="foto morfologi" loading="eager" style="width:70px;height:70px;object-fit:cover;border-radius:4px;border:1px solid #ccc;cursor:pointer;display:block;" onclick="showImageModal(\'' . $fotoMorfologiUrl . '\')" title="Klik untuk melihat gambar lebih besar">';
								$html .= '<div style="text-align:center;font-size:11px;color:#333;margin-top:2px;background:linear-gradient(90deg,#e0eafc 0%,#cfdef3 100%);padding:2px 0;border-radius:4px;">' . (isset($foto->tanggal) ? date('d-m-Y', strtotime($foto->tanggal)) : '') . '</div>';
								$html .= '</div>';
							}
					}
					$html .= '</div>'; // close scroll container
					$html .= '</div>';
				}


				$fotoDrone = DB::table('tx_foto_drone')
					->where('lahan_id', $firstLahanId)
					->orderBy('createdOn', 'desc')
					->limit(3)
					->get();

				
				if ($fotoDrone && $fotoDrone->count() > 0) {
					$html .= '<div style="margin-top:0px;">';
					$html .= '<div style="font-weight:bold;margin-bottom:5px;">Foto Drone</div>';
					foreach ($fotoDrone as $foto) {
						$fotoDronePath = $foto->foto;
						//$fotoDroneUrl = (strpos($fotoDronePath, 'uploads/') === 0)
						//	? url($fotoDronePath)
						//	: url('uploads/foto_drone/' . $fotoDronePath);
						$localDrone = public_path('uploads/foto_drone/' . $fotoDronePath);
						$localDroneUrl = url('uploads/foto_drone/' . $fotoDronePath);
						$cdnDroneUrl = 'https://asset.nikochannel.com/uploads/foto_drone/thumb_' . $fotoDronePath;

						$fotoDroneUrl = file_exists($localDrone)
							? $localDroneUrl
							: $cdnDroneUrl;

						$html .= '<div style="display:inline-block;text-align:center;margin-right:8px;margin-bottom:8px;">';
						$html .= '<img src="' . $fotoDroneUrl . '" alt="foto drone" loading="eager" style="width:70px;height:70px;object-fit:cover;border-radius:4px;border:1px solid #ccc;cursor:pointer;display:block;" onclick="showImageModal(\'' . $fotoDroneUrl . '\')" title="Klik untuk melihat gambar lebih besar">';
						$html .= '<div style="font-size:11px;color:#333;margin-top:2px;background:linear-gradient(90deg,#e0eafc 0%,#cfdef3 100%);padding:2px 0;border-radius:4px;">' . (isset($foto->tanggal) ? date('d-m-Y', strtotime($foto->tanggal)) : (isset($foto->createdOn) ? date('d-m-Y', strtotime($foto->createdOn)) : '')) . '</div>';
						$html .= '</div>';
					}
					$html .= '</div>';
				}
				$html .= '</div></div></div>'; // Close col-6 and row divs


			}

			$response['html'] = $html;

			return response()->json($response);					
	}
	public function cekmapidlahan(request $request){
			$lahanIds = $request->input('lahan_ids');

		if($request->input('thntnm') == "2526"){
			$datapetak = DB::table('q_prod_rekap_mejatebu_petak_aff as p')
				->select(
					DB::raw('COALESCE(p.ket_aff_manual, p.ket_aff_auto) as ket_aff_manual'),
					'p.id_lahan',
					'p.protas_aff',
					DB::raw('GROUP_CONCAT(f.foto) as foto'),
					DB::raw('GROUP_CONCAT(date(f.createdOn)) as tgl_foto')
				)
				->leftJoin('tx_foto_tebangan_lahan as f', function($join) {
					$join->on('f.lahan_id', '=', 'p.id_lahan');
				})
				->whereIn('p.id_lahan', $lahanIds)
				->groupBy('p.id_lahan', 'p.ket_aff_manual', 'p.ket_aff_auto', 'p.protas_aff')
				->get();


		}else if($request->input('thntnm') == "2627"){
			$datapetak = DB::table('master_petak as p')
			->select(
				DB::raw('0 as ket_aff_manual, p.lahan_id as id_lahan, 0 as protas_aff'),
				DB::raw('GROUP_CONCAT(f.foto) as foto'),
				DB::raw('GROUP_CONCAT(date(f.createdOn)) as tgl_foto')
			)
			->leftJoin('tx_foto_tebangan_lahan as f', function($join) {
				$join->on('f.lahan_id', '=', 'p.lahan_id');
			})
			->whereIn('p.lahan_id', $lahanIds)
			->groupBy('p.lahan_id')
			->get();

		}else{
			$datapetak = DB::table('master_petak as p')
			->whereIn('p.lahan_id', $lahanIds)
			->get();

		}

		

		$response = [];
		if ($datapetak->isNotEmpty()) {
			foreach ($datapetak as $data) {
				// Status warna dan realisasi
				if (!empty($data->ket_aff_manual)) {
					$response[$data->id_lahan] = 'red';
					$response['real_'.$data->id_lahan] = $data->protas_aff;
				} elseif (empty($data->ket_aff_manual) && !empty($data->id_lahan)) {
					$response[$data->id_lahan] = 'yellow';
					$response['real_'.$data->id_lahan] = $data->protas_aff;
				}
				// Foto: jadikan array jika lebih dari 1
				if (!empty($data->foto)) {
					$fotos = explode(',', $data->foto);
					$tgl_fotos = explode(',', $data->tgl_foto);
					// Tambahkan prefix '/uploads/foto_petakebun/' jika belum ada
					$fotoPaths = array_map(function($foto) {
						if (!$foto) return null;
						return (strpos($foto, 'uploads/') === 0 || strpos($foto, '/uploads/') === 0)
							? $foto
							: 'uploads/foto_petakebun/' . $foto;
					}, $fotos);
					$response['foto_'.$data->id_lahan] = count($fotoPaths) > 1 ? $fotoPaths : $fotoPaths[0];
					$response['tgl_foto_'.$data->id_lahan] = count($fotos) > 1 ? $tgl_fotos : $tgl_fotos[0];
				}
			}
		}

		// Default all lahan_ids to green if not explicitly set
		foreach ($lahanIds as $id) {
			if (!isset($response[$id])) {
				$response[$id] = 'green';
				$response['real_'.$id] = 0;
				$response['foto_'.$id] = null;
				$response['tgl_foto_'.$id] = null;
			} elseif (!isset($response['foto_'.$id])) {
				$response['foto_'.$id] = null;
				$response['tgl_foto_'.$id] = null;
			}
		}

		return response()->json($response);				
	}
	public function cekmapidlahanlkp(request $request){
		config(['app.debug' => true]);
		$lahanIds = $request->input('lahan_ids');

		
			$datapetak = DB::table('TX_TOTAL_KSO as p')
				->Join('master_petak as m', 'p.id_lahan', '=', 'm.lahan_id')
				//left join v_rekap_timbangan_petak_petakebun 
				->leftJoin('v_rekap_timbangan_petak_petakebun as t', 'p.id_lahan', '=', 't.lahan_id')
			
				->whereIn('p.id_lahan', $lahanIds)
				->groupBy('p.id_lahan')
				->get();

		

		

		$response = [];
		if ($datapetak->isNotEmpty()) {
			foreach ($datapetak as $data) {
				// Status warna dan realisasi
				if (!empty($data->ha)) {
					if(!empty($data->luas_poligon)){
						$response[$data->id_lahan] = 'yellow';
					}else{
						$response[$data->id_lahan] = 'green';
					}					
				} else{
					$response[$data->id_lahan] = 'blue';
				}
				// Foto: jadikan array jika lebih dari 1
				// if (!empty($data->foto)) {
				// 	$fotos = explode(',', $data->foto);
				// 	$tgl_fotos = explode(',', $data->tgl_foto);
				// 	$response['foto_'.$data->id_lahan] = count($fotos) > 1 ? $fotos : $fotos[0];
				// 	$response['tgl_foto_'.$data->id_lahan] = count($fotos) > 1 ? $tgl_fotos : $tgl_fotos[0];
				// }
			}
		}

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