<?php namespace App\Http\Controllers;

use App\Library\DataHelpers;
use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator as Paginator;
use Validator, Input, Redirect ; 

class MindmapController extends Controller {

	
	
	public function __construct() 
	{
		parent::__construct();
	
			
				
	} 
	public function index()
	{
			 config(['app.debug' => true]);
		if(!\Auth::check()) 
			return redirect('user/login')->with('status', 'error')->with('message','You are not login');

		$this->data['pageTitle']	=	'Mind Map Builder';
		$this->data['pageNote']		=	'Create and manage mind maps';
		return view('mindmap.index',$this->data);
	}
	
	public function api(Request $request)
	{
			 config(['app.debug' => true]);
		$baseDir = resource_path('views/mindmap/projects');
		if (!is_dir($baseDir)) {
			@mkdir($baseDir, 0755, true);
		}

		$action = $request->query('action', '');

		

		if ($action === 'list') {
			$items = [];
			foreach (glob($baseDir . '/*.json') as $file) {
				$name = basename($file, '.json');
				$items[] = [
					'name' => $name,
					'updatedAt' => $this->timeFmt(@filemtime($file) ?: time()),
					'_ts' => @filemtime($file) ?: time(), // Tambahkan timestamp untuk sorting
				];
			}
			usort($items, function($a, $b) {
				return $b['_ts'] <=> $a['_ts'];
			});
			foreach ($items as &$item) {
				unset($item['_ts']); // Hapus field _ts sebelum response
			}
			unset($item);
			return response()->json($items);
		}

		if ($action === 'open') {
			$name = $this->safeName((string)$request->query('name', ''));
			$file = $baseDir . '/' . $name . '.json';
			if (!is_file($file)) {
				return response()->json(['ok' => false, 'error' => 'not_found'], 404);
			}
			$content = @file_get_contents($file);
			return response()->json(json_decode($content, true));
		}

		if ($action === 'delete') {
			$name = $this->safeName((string)$request->query('name', ''));
			$file = $baseDir . '/' . $name . '.json';
			$ok = is_file($file) ? @unlink($file) : false;
			return response()->json(['ok' => $ok]);
		}

		return response()->json(['ok' => false, 'error' => 'unknown_action'], 400);
	}

	
	function save(Request $request)
	{
		$baseDir = resource_path('views/mindmap/projects');
		//config(['app.debug' => true]);
			$json = $request->json()->all();
			if (!is_array($json) || !isset($json['name'], $json['data'])) {
				return response()->json(['ok' => false, 'error' => 'invalid_payload'], 400);
			}
			$name = $this->safeName((string)$json['name']);
			$data = json_encode($json['data'], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
			$file = $baseDir . '/' . $name . '.json';
			$ok = @file_put_contents($file, $data) !== false;
			return response()->json(['ok' => $ok, 'name' => $name]);
	}
		function safeName(string $name): string {
			$name = trim($name);
			$name = preg_replace('/[^A-Za-z0-9_\-]/', '_', $name);
			if ($name === '') $name = 'untitled';
			return $name;
		}

		function timeFmt(int $ts): string {
			return date('Y-m-d H:i', $ts);
		}

	function show( Request $request , $id ) 
	{
		/* Handle import , export and view */
		$task =$id ;
		switch( $task)
		{
			case 'api':
				return $this->api($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':
				return $this->save( $request);
				break;
		

		}
	}
}