<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;

class AccountController extends Controller
{
    // ১. সব অ্যাকাউন্টের লিস্ট JSON রিটার্ন
    public function index(Request $request)
	{
		$accounts = DB::table('chart_of_accounts')
			->orderBy('head_type', 'asc')
			->orderBy('head_name', 'asc')
			->get();

		// যদি রিকোয়েস্টটি AJAX হয় (যেমন টেবিল লোড করার সময়)
		if ($request->ajax() || $request->wantsJson()) {
			return response()->json([
				'status' => 'success',
				'data' => $accounts
			]);
		}

		// ব্রাউজারে সরাসরি হিট করলে এই ভিউটি দেখাবে
		return view('admin.accounts.chart', compact('accounts'));
	}

    // ২. নতুন অ্যাকাউন্ট হেড তৈরি (JSON Response)
    public function store(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'head_name' => 'required|max:100',
            'head_type' => 'required|in:Income,Expense'
        ]);

        if ($validator->fails()) {
            return response()->json([
                'status' => 'error',
                'errors' => $validator->errors()
            ], 422);
        }

        $id = DB::table('chart_of_accounts')->insertGetId([
            'head_name'         => $request->head_name,
            'head_type'         => $request->head_type,
            'is_system_defined' => 0, //
            'created_at'        => now()
        ]);

        return response()->json([
            'status' => 'success',
            'message' => 'নতুন হিসাবের খাত তৈরি হয়েছে',
            'id' => $id
        ], 201);
    }

    // ৩. নির্দিষ্ট হেড এর তথ্য (JSON)
    public function show($id)
    {
        $account = DB::table('chart_of_accounts')->where('id', $id)->first();

        if (!$account) {
            return response()->json(['status' => 'error', 'message' => 'ডাটা পাওয়া যায়নি'], 404);
        }

        return response()->json(['status' => 'success', 'data' => $account], 200);
    }

    // ৪. আপডেট করা (JSON Response)
    public function update(Request $request, $id)
    {
        $account = DB::table('chart_of_accounts')->where('id', $id)->first();

        if (!$account) {
            return response()->json(['status' => 'error', 'message' => 'খাতটি খুঁজে পাওয়া যায়নি'], 404);
        }

        if ($account->is_system_defined) { //
            return response()->json(['status' => 'error', 'message' => 'সিস্টেম নির্ধারিত খাত পরিবর্তনযোগ্য নয়'], 403);
        }

        DB::table('chart_of_accounts')->where('id', $id)->update([
            'head_name' => $request->head_name,
            'head_type' => $request->head_type,
            'updated_at' => now()
        ]);

        return response()->json(['status' => 'success', 'message' => 'আপডেট সফল হয়েছে'], 200);
    }

    // ৫. ডিলিট করা (JSON Response)
    public function destroy($id)
    {
        $account = DB::table('chart_of_accounts')->where('id', $id)->first();

        if (!$account) {
            return response()->json(['status' => 'error', 'message' => 'খাতটি নেই'], 404);
        }

        if ($account->is_system_defined) { //
            return response()->json(['status' => 'error', 'message' => 'সিস্টেম নির্ধারিত খাত ডিলিট করা যাবে না'], 403);
        }

        // ট্রানজেকশন চেক
        $hasTransaction = DB::table('general_ledger')->where('account_head_id', $id)->exists();
        if ($hasTransaction) {
            return response()->json(['status' => 'error', 'message' => 'এই খাতের আন্ডারে লেনদেন আছে'], 400);
        }

        DB::table('chart_of_accounts')->where('id', $id)->delete();

        return response()->json(['status' => 'success', 'message' => 'সফলভাবে মুছে ফেলা হয়েছে'], 200);
    }
}