<?php

namespace App\Repositories\Launchpad;

use App\Models\Launchpad\Launchpad;
use App\Models\Launchpad\LaunchpadTransaction;
use App\Models\Transaction\ReferralTransaction;
use App\Models\User\User;
use Auth;

class LaunchpadRepository
{
    /**
     * @var Launchpad
     */
    protected $launchpad;

    /**
     * LaunchpadRepository constructor.
     *
     */
    public function __construct()
    {
        $this->launchpad = new Launchpad();
    }

    public function get($paginate = true, $filter = "all") {

        $launchpads = Launchpad::query();

        if($filter && $filter !== "all") {

            if($filter == "upcoming") $filter = 'pending';

            $launchpads->where('progress', $filter);
        }

        $launchpads->orderBy('id', 'desc');

        $launchpads->has('currency');

        $launchpads->with('currency.file');

        if(!$paginate) {
            return $launchpads->get();
        }

        return $launchpads->paginate(100)->withQueryString();
    }

    public function all($onlyActive = false) {

        $launchpads = Launchpad::query();

        if($onlyActive) {
            $launchpads->active();
        }

        return $launchpads->get();

    }

    public function getLaunchpadById($id) {
        return Launchpad::find($id);
    }

    public function store($data) {

        $launchpad = $this->launchpad->create($data);

        return $launchpad->fresh();
    }

    public function update($id, $data) {

        $launchpad = Launchpad::find($id);
        $launchpad->update($data);
        return $launchpad->fresh();
    }

    public function delete($id) {

        $launchpad = Launchpad::find($id);
        $launchpad->delete();

        return true;
    }

    public function getReport() {

        $transaction = LaunchpadTransaction::query();

        $transaction->filter(request()->only(['search', 'referrer']))->orderByLatest();

        $transaction->has('launchpad')->has('user');

        $transaction->with(['launchpad.currency', 'user']);

        return $transaction->paginate(50)->withQueryString();
    }

    public function getReportUser(User $user, $limit = 15, $start = false, $end = false, $paginate = false) {

        $transaction = LaunchpadTransaction::query();

        $transaction->filter(request()->only(['search','side']))->orderByLatest();

        $transaction->has('launchpad')->has('user');

        $transaction->with(['launchpad.currency']);

        $transaction->where('user_id', $user->id);

        if($start && $end) {
            $transaction->whereBetween('created_at', [$start, $end]);
        }

        if($paginate) {
            return $transaction->simplePaginate($limit);
        }

        return $transaction->paginate(50)->withQueryString();
    }
}
