<?php

namespace App\Http\Controllers;

use App\Order;
use App\Payment;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use Payjp\Charge;
use Payjp\Payjp;

class OrderPaymentController extends Controller
{
    public function __construct()
    {
        Payjp::setApiKey(config('payjp.secret_key'));
    }

    /**
     * Show payment form for order
     */
    public function showPaymentForm($token)
    {
        $order = Order::where('payment_token', $token)
            ->where('payment_status', 0) // unpaid
            ->first();
            
        if (!$order) {
            return view('payment.error')->with('message', 'お支払いリンクが無効または期限切れです。');
        }
        
        return view('payment.credit_card', compact('order'));
    }

    /**
     * Process credit card payment
     */
    public function processPayment(Request $request, $token)
    {
        $order = Order::where('payment_token', $token)
            ->where('payment_status', 0)
            ->first();
            
        if (!$order) {
            return response()->json(['error' => 'Invalid payment link'], 400);
        }

        try {
            $charge = Charge::create([
                'amount' => $order->total_price,
                'currency' => 'jpy',
                'card' => $request->payjp_token,
                'description' => 'Order #' . $order->code
            ]);

            // Update order payment status
            $order->update([
                'payment_status' => 1, // paid
                'payment_token' => null, // clear token after use
                'updated_at' => now()
            ]);

            // Save payment record
            Payment::create([
                'order_id' => $order->id,
                'payment_id' => $charge->id,
                'amount' => $order->total_price,
                'currency' => 'jpy',
                'status' => 'paid',
                'gateway' => 'payjp',
                'created_at' => now(),
                'updated_at' => now()
            ]);

            return response()->json(['success' => true, 'message' => 'お支払いが完了しました。']);

        } catch (\Exception $e) {
            return response()->json(['error' => 'お支払い処理中にエラーが発生しました。'], 500);
        }
    }
}