<?php
namespace App\Controllers\PSI;

use App\Controllers\Controller;
use App\Models\Order;
use App\Models\Payment;
use Core\Payment\OrderService;

/**
 * PSI 订单管理：将原「后台订单」合并到进销存系统，便于管理人员在同一系统快速处理。
 * 权限：该系统拥有 orders 页面权限的用户（默认 PSI 管理员/超管全部可见，普通用户按 perms 细粒度控制）。
 * 关键动作（标记支付、删除）仅限 PSI 管理员，避免普通操作员误改订单。
 */
class OrdersController extends Controller
{
    /** 列表：最新在前 */
    public function index()
    {
        $order = new Order();
        $all = array_reverse($order->all());
        return $this->renderSubsys('psi', 'psi/orders', ['orders' => $all], \subsys_nav('psi'), 'orders');
    }

    /** 详情：订单信息 + 付款记录 */
    public function show($id)
    {
        $order = new Order();
        $o = $order->find($id);
        if (!$o) { \Core\App::notFound(); return; }
        $payments = (new Payment())->whereAll('order_no', $o['order_no']);
        return $this->renderSubsys('psi', 'psi/order_show', [
            'o' => $o, 'payments' => $payments,
        ], \subsys_nav('psi'), 'orders');
    }

    /** 标记为已支付（仅 PSI 管理员） */
    public function markPaid($id)
    {
        subsys_admin('psi') or \Core\App::forbidden('需要 PSI 管理员权限');
        if ($_SERVER['REQUEST_METHOD'] === 'POST' && csrf_check()) {
            $order = new Order();
            $o = $order->find($id);
            if ($o && $o['status'] !== 'paid') {
                OrderService::markPaid($o['order_no'], 'MANUAL' . time(), $o['channel'] ?: 'manual');
                $this->flash('订单已标记为已支付', 'ok');
            }
        }
        return $this->redirect('PSI/orders/show/' . $id);
    }

    /** 删除订单（仅 PSI 管理员） */
    public function destroy($id)
    {
        subsys_admin('psi') or \Core\App::forbidden('需要 PSI 管理员权限');
        if ($_SERVER['REQUEST_METHOD'] === 'POST' && csrf_check()) {
            (new Order())->delete($id);
            $this->flash('订单已删除', 'ok');
        }
        return $this->redirect('PSI/orders');
    }
}
