<?php

namespace App\Http\Controllers\Web\Admin;

use App\Http\Controllers\Controller;
use App\Http\Requests\Web\ColdStorage\ColdStorageFormRequest;
use App\Models\ColdStorage\ColdStorage;
use App\Repositories\ColdStorage\ColdStorageRepository;
use App\Repositories\Currency\CurrencyRepository;
use App\Repositories\Network\NetworkRepository;
use App\Services\Currency\CurrencyService;
use Illuminate\Support\Facades\Redirect;
use Inertia\Inertia;
use Setting;

class ColdStorageController extends Controller
{
    /**
     * @var ColdStorageRepository
     */
    protected $coldStorageRepository;

    /**
     * ColdStorageController Constructor
     *
     * @param ColdStorageRepository ColdStorageRepository
     *
     */
    public function __construct(ColdStorageRepository $coldStorageRepository)
    {
        $this->coldStorageRepository = $coldStorageRepository;
    }


    public function index()
    {
        $coldStorage = $this->coldStorageRepository->get();

        return Inertia::render('Admin/ColdStorage/Index', [
            'coldStorage' => $coldStorage,
        ]);
    }

    /**
     * Create new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        $networks = (new NetworkRepository())->get(true, true);
        $currencies = (new CurrencyRepository())->all(false, false, [], 'coin');

        return Inertia::render('Admin/ColdStorage/Form', [
            'currencies' => $currencies,
            'networks' => $networks
        ]);
    }

    /**
     * Store new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function store(ColdStorageFormRequest $request)
    {
        $this->coldStorageRepository->store($request->only([
            'currency_id',
            'network_id',
            'address',
            'cold_min_balance_amount',
            'cold_transfer_amount',
            'cold_storage_transaction_id',
            'status'
        ]));

        return Redirect::route('admin.cold_storage');
    }

    /**
     * Edit resource.
     *
     * @param ColdStorage $coldStorage
     * @return \Inertia\Response
     */
    public function edit(ColdStorage $coldStorage)
    {
        $currencies = (new CurrencyRepository())->all(false, false, [], 'coin');
        $networks = (new NetworkRepository())->get(true, true);

        $coldStorage = $this->coldStorageRepository->getColdStorageById($coldStorage->id);

        return Inertia::render('Admin/ColdStorage/Form', [
            'isEdit' => true,
            'coldStorage' => $coldStorage,
            'currencies' => $currencies,
            'networks' => $networks,
        ]);
    }

    /**
     * Update resource.
     *
     * @param ColdStorage $coldStorage
     * @return \Illuminate\Http\RedirectResponse
     */
    public function update(ColdStorageFormRequest $request, ColdStorage $coldStorage)
    {
        $this->coldStorageRepository->update($coldStorage->id, $request->only([
            'currency_id',
            'network_id',
            'address',
            'cold_min_balance_amount',
            'cold_transfer_amount',
            'cold_storage_transaction_id',
            'status'
        ]));

        return Redirect::route('admin.cold_storage');
    }

    /**
     * Destroy resource.
     *
     * @param ColdStorage $coldStorage
     * @return \Illuminate\Http\RedirectResponse
     */
    public function destroy(ColdStorage $coldStorage)
    {
        $this->coldStorageRepository->delete($coldStorage->id);

        return Redirect::route('admin.cold_storage');
    }
}
