<?php

namespace App\Http\Controllers\Admin\BasicSettings;

use App\Http\Controllers\Admin\AdminController;
use App\Models\System\PaymentConfig;
use Illuminate\Http\Request;
use Illuminate\View\View;
use Illuminate\Http\RedirectResponse;

class PaymentConfigController extends AdminController
{
    /**
     * 顯示金流配置列表
     */
    public function index(Request $request): View
    {
        $per_page = $request->input('per_page', 20);
        $configs = PaymentConfig::query()
            ->when($request->search, function ($query, $search) {
                $query->where('name', 'like', "%{$search}%")
                    ->orWhereHas('company', function ($q) use ($search) {
                        $q->where('name', 'like', "%{$search}%");
                    });
            })
            ->with(['company', 'creator'])
            ->latest()
            ->paginate($per_page)
            ->withQueryString();

        return view('admin.basic-settings.payment-configs.index', [
            'paymentConfigs' => $configs
        ]);
    }

    /**
     * 顯示新增頁面
     */
    public function create(): View
    {
        $companies = \App\Models\System\Company::select('id', 'name', 'code')->get();
        return view('admin.basic-settings.payment-configs.create', compact('companies'));
    }

    /**
     * 儲存金流配置
     */
    public function store(Request $request): RedirectResponse
    {
        $request->validate([
            'name' => 'required|string|max:255',
            'company_id' => 'required|exists:companies,id',
            'settings' => 'required|array',
        ]);

        PaymentConfig::create([
            'name' => $request->name,
            'company_id' => $request->company_id,
            'settings' => $request->settings,
            'creator_id' => auth()->id(),
            'updater_id' => auth()->id(),
        ]);

        return redirect()->route('admin.basic-settings.payment-configs.index')
            ->with('success', __('Payment Configuration created successfully.'));
    }

    /**
     * 顯示編輯頁面
     */
    public function edit(PaymentConfig $paymentConfig): View
    {
        $companies = \App\Models\System\Company::select('id', 'name')->get();
        return view('admin.basic-settings.payment-configs.edit', compact('paymentConfig', 'companies'));
    }

    /**
     * 更新金流配置
     */
    public function update(Request $request, PaymentConfig $paymentConfig): RedirectResponse
    {
        $request->validate([
            'name' => 'required|string|max:255',
            'settings' => 'required|array',
        ]);

        $paymentConfig->update([
            'name' => $request->name,
            'settings' => $request->settings,
            'updater_id' => auth()->id(),
        ]);

        return redirect()->route('admin.basic-settings.payment-configs.index')
            ->with('success', __('Payment Configuration updated successfully.'));
    }

    /**
     * 刪除金流配置
     */
    public function destroy(PaymentConfig $paymentConfig): RedirectResponse
    {
        $paymentConfig->delete();
        return redirect()->route('admin.basic-settings.payment-configs.index')
            ->with('success', __('Payment Configuration deleted successfully.'));
    }
}
