<?php
namespace App\Controllers\Test;

use App\Traits\ResponseTrait;
use CodeIgniter\Controller;
use App\Libraries\ValueSet;
use App\Models\Patient\PatientModel;
use App\Models\OrderTestModel;

class DemoOrderController extends Controller {
    use ResponseTrait;

    protected $db;
    protected $patientModel;
    protected $orderModel;

    public function __construct() {
        $this->db = \Config\Database::connect();
        $this->patientModel = new PatientModel();
        $this->orderModel = new OrderTestModel();
    }

    public function createDemoOrder() {
        $input = $this->request->getJSON(true);

        $patientData = [
            'PatientID' => $input['PatientID'] ?? 'DEMO' . time(),
            'Gender' => $input['Gender'] ?? '1',
            'NameFirst' => $input['NameFirst'] ?? 'Demo',
            'NameLast' => $input['NameLast'] ?? 'Patient',
            'Birthdate' => $input['Birthdate'] ?? '1990-01-01'
        ];

        $patient = $this->patientModel->where('PatientID', $patientData['PatientID'])->findAll();
        if (empty($patient)) {
            $internalPID = $this->patientModel->createPatient($patientData);
        } else {
            $internalPID = $patient[0]['InternalPID'];
        }

        $orderData = [
            'InternalPID' => $internalPID,
            'PatVisitID' => $input['PatVisitID'] ?? null,
            'Priority' => $input['Priority'] ?? 'R',
            'OrderingProvider' => $input['OrderingProvider'] ?? 'Dr. Demo',
            'DepartmentID' => $input['DepartmentID'] ?? 1,
            'Tests' => $input['Tests'] ?? []
        ];

        $orderID = $this->orderModel->createOrder($orderData);

        return $this->respond([
            'status' => 'success',
            'message' => 'Demo order created successfully',
            'data' => [
                'PatientID' => $patientData['PatientID'],
                'InternalPID' => $internalPID,
                'OrderID' => $orderID,
                'OrderStatus' => 'ORD'
            ]
        ], 201);
    }

    public function listDemoOrders() {
        $orders = $this->db->table('ordertest ot')
            ->select('ot.OrderID, ot.InternalPID, p.PatientID, ot.OrderDateTime, ot.Priority, ot.OrderStatus')
            ->join('patient p', 'p.InternalPID = ot.InternalPID')
            ->where('ot.DelDate', null)
            ->orderBy('ot.OrderDateTime', 'DESC')
            ->limit(50)
            ->get()
            ->getResultArray();

        $orders = ValueSet::transformLabels($orders, [
            'Priority' => 'order_priority',
            'OrderStatus' => 'order_status',
        ]);

        return $this->respond([
            'status' => 'success',
            'message' => 'Data fetched successfully',
            'data' => $orders
        ], 200);
    }
}
