<?php

namespace App\Http\Controllers\Api\Admin;

use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Services\GlobalMenuService;
use Illuminate\Http\Request;

/**
 * 글로벌 메뉴 관리 컨트롤러 (시스템 관리자용)
 */
class GlobalMenuController extends Controller
{
    public function __construct(
        protected GlobalMenuService $globalMenuService
    ) {}

    /**
     * 글로벌 메뉴 목록 조회
     */
    public function index(Request $request)
    {
        return ApiResponse::handle(function () use ($request) {
            return $this->globalMenuService->index($request->all());
        }, '글로벌 메뉴 목록 조회');
    }

    /**
     * 글로벌 메뉴 트리 조회
     */
    public function tree()
    {
        return ApiResponse::handle(function () {
            return $this->globalMenuService->tree();
        }, '글로벌 메뉴 트리 조회');
    }

    /**
     * 글로벌 메뉴 단건 조회
     */
    public function show($id)
    {
        return ApiResponse::handle(function () use ($id) {
            $menu = $this->globalMenuService->show((int) $id);

            if (! $menu) {
                return ['error' => __('error.menu_not_found'), 'code' => 404];
            }

            return $menu;
        }, '글로벌 메뉴 상세 조회');
    }

    /**
     * 글로벌 메뉴 생성
     */
    public function store(Request $request)
    {
        return ApiResponse::handle(function () use ($request) {
            return $this->globalMenuService->store($request->all());
        }, '글로벌 메뉴 생성');
    }

    /**
     * 글로벌 메뉴 수정
     */
    public function update(Request $request, $id)
    {
        return ApiResponse::handle(function () use ($request, $id) {
            $menu = $this->globalMenuService->update((int) $id, $request->all());

            if (! $menu) {
                return ['error' => __('error.menu_not_found'), 'code' => 404];
            }

            return $menu;
        }, '글로벌 메뉴 수정');
    }

    /**
     * 글로벌 메뉴 삭제
     */
    public function destroy($id)
    {
        return ApiResponse::handle(function () use ($id) {
            $result = $this->globalMenuService->destroy((int) $id);

            if (! $result) {
                return ['error' => __('error.menu_not_found'), 'code' => 404];
            }

            return __('message.deleted');
        }, '글로벌 메뉴 삭제');
    }

    /**
     * 글로벌 메뉴 순서 변경
     */
    public function reorder(Request $request)
    {
        return ApiResponse::handle(function () use ($request) {
            $items = $request->input('items', []);

            $this->globalMenuService->reorder($items);

            return __('message.reordered');
        }, '글로벌 메뉴 순서 변경');
    }

    /**
     * 특정 글로벌 메뉴를 모든 테넌트에 동기화
     */
    public function syncToTenants($id)
    {
        return ApiResponse::handle(function () use ($id) {
            return $this->globalMenuService->syncToAllTenants((int) $id);
        }, '모든 테넌트에 메뉴 동기화');
    }

    /**
     * 글로벌 메뉴 통계 조회
     */
    public function stats()
    {
        return ApiResponse::handle(function () {
            return $this->globalMenuService->stats();
        }, '글로벌 메뉴 통계 조회');
    }
}
