<?php

namespace App\Http\Controllers\Finance;

use App\Http\Controllers\Controller;
use App\Services\BankAccountService;
use Illuminate\Contracts\View\View;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class BankAccountController extends Controller
{
    public function __construct(
        private BankAccountService $bankAccountService
    ) {}

    /**
     * 계좌 목록 페이지
     */
    public function index(Request $request): View|Response
    {
        // HTMX 부분 로드 시 전체 페이지 리로드 (스크립트 실행 보장)
        if ($request->header('HX-Request')) {
            return response('', 200)->header('HX-Redirect', route('finance.accounts.index'));
        }

        $summary = $this->bankAccountService->getSummary();

        return view('finance.accounts.index', [
            'summary' => $summary,
        ]);
    }

    /**
     * 계좌 등록 페이지
     */
    public function create(): View
    {
        return view('finance.accounts.create');
    }

    /**
     * 계좌 수정 페이지
     */
    public function edit(int $id): View
    {
        $account = $this->bankAccountService->getAccountById($id);

        if (! $account) {
            abort(404, '계좌를 찾을 수 없습니다.');
        }

        return view('finance.accounts.edit', [
            'account' => $account,
        ]);
    }

    /**
     * 계좌 상세/거래내역 페이지
     */
    public function show(int $id): View
    {
        $account = $this->bankAccountService->getAccountById($id);

        if (! $account) {
            abort(404, '계좌를 찾을 수 없습니다.');
        }

        return view('finance.accounts.show', [
            'account' => $account,
        ]);
    }
}
