<?php

namespace App\Http\Controllers\Web\Client;

use App\Http\Controllers\Controller;
use App\Http\Requests\Web\Launchpad\LaunchpadPurchaseRequest;
use App\Http\Resources\Launchpad\Launchpad as LaunchpadResource;
use App\Http\Resources\Launchpad\LaunchpadCollection;
use App\Models\Launchpad\Launchpad;
use App\Models\Launchpad\LaunchpadTransaction;
use App\Repositories\Currency\CurrencyRepository;
use App\Repositories\Launchpad\LaunchpadRepository;
use App\Repositories\Wallet\WalletRepository;
use App\Services\Wallet\WalletService;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Inertia\Inertia;

class LaunchpadController extends Controller
{

    public function index($sort = "all")
    {
        $launchpads = new LaunchpadCollection((new LaunchpadRepository())->get(false, $sort));

        return Inertia::render('Launchpad/Launchpads', [
            'launchpads' => $launchpads,
            'sort' => $sort
        ]);
    }


    public function show(Launchpad $launchpad)
    {
        $launchpad = (new LaunchpadRepository())->getLaunchpadById($launchpad->id);

        if(!$launchpad) {
            throw new ModelNotFoundException();
        }

        return Inertia::render('Launchpad/Launchpad', [
            'launchpad' => new LaunchpadResource($launchpad),
        ]);
    }

    public function submit(LaunchpadPurchaseRequest $request) {

        $launchpad = Launchpad::where('id', $request->get('id'))->lockForUpdate()->first();

        $symbol = 'USDC';
        //$symbol = $launchpad->network_id == NETWORK_BNB ? 'BNB' : 'ETH';

        $user = auth()->user();

        $currency = (new CurrencyRepository())->getCurrencyBySymbol($symbol);

        $wallet = (new WalletRepository())->getWalletByCurrency($user->id, $currency->id, false);

        (new WalletService())->decrease($wallet, $request->get('amount'), 'wallet');

        $launchpad->raised_amount = $launchpad->raised_amount + $request->get('amount');
        $launchpad->update();

        $transaction = new LaunchpadTransaction();
        $transaction->user_id = $user->id;
        $transaction->launchpad_id = $launchpad->id;
        $transaction->amount = $request->get('amount');
        $transaction->save();

        return response()->json(['success' => true]);

    }
}
