<?php

namespace App\Http\Middleware\Board;

use Closure;
use Illuminate\Http\Request;
use App\Services\BoardService;
use App\Services\PostService;
use App\Services\CommentService;

class CommentReply
{
    public function handle(Request $request, Closure $next)
    {
        $boardService = new BoardService();
        $postService = new PostService();
        $commentService = new CommentService();

        $code = $request->route('code');
        $postID = $request->route('postID');
        $commentID = $request->post('cid');

        // 게시판 코드 확인
        if (!$code || !$postID || !$commentID) {
            abort(404);
        }

        // 게시판 조회
        $board = $boardService->info($code);

        // 게시판 존재 유무
        if (!$board || !$board->exists) {
            return response()->json(['success' => false, 'message' => '존재하지 않는 게시판입니다.']);
        }

        // 게시판 사용 여부
        if ($board->is_display == 0) {
            return response()->json(['success' => false, 'message' => '더 이상 사용하지 않는 게시판입니다.']);
        }

        // 권한 유무
        $permission = $boardService->permission($code, BOARD_PERMIT_TYPE_4);
        if (!$permission->success) {
            return response()->json(['success' => false, 'message' => $permission->message]);
        }

        // 게시글 존재 유무
        if (!$postService->isExists($code, $postID)) {
            return response()->json(['success' => false, 'message' => '존재하지 않는 게시글입니다.']);
        }

        // 답변 댓글 존재 확인
        if (!$commentService->isExists($postID, $commentID)) {
            return response()->json(['success' => false, 'message' => '잘못된 요청입니다.']);
        }

        return $next($request);
    }
}
