<?php

namespace App\Actions\Proxy;

use App\Models\Server;
use Lorisleiva\Actions\Concerns\AsAction;

class CheckProxy
{
    use AsAction;
    public function handle(Server $server, $fromUI = false)
    {
        if (!$server->isProxyShouldRun()) {
            if ($fromUI) {
                throw new \Exception("Proxy should not run. You selected the Custom Proxy.");
            } else {
                return false;
            }
        }
        $status = getContainerStatus($server, 'coolify-proxy');
        if ($status === 'running') {
            $server->proxy->set('status', 'running');
            $server->save();
            return false;
        }
        $ip = $server->ip;
        if ($server->id === 0) {
            $ip = 'host.docker.internal';
        }

        $connection80 = @fsockopen($ip, '80');
        $connection443 = @fsockopen($ip, '443');
        $port80 = is_resource($connection80) && fclose($connection80);
        $port443 = is_resource($connection443) && fclose($connection443);
        if ($port80) {
            if ($fromUI) {
                throw new \Exception("Port 80 is in use.<br>You must stop the process using this port.<br>Docs: <a target='_blank' href='https://coolify.io/docs'>https://coolify.io/docs</a> <br> Discord: <a target='_blank'  href='https://coollabs.io/discord'>https://coollabs.io/discord</a>");
            } else {
                return false;
            }
        }
        if ($port443) {
            if ($fromUI) {
                throw new \Exception("Port 443 is in use.<br>You must stop the process using this port.<br>Docs: <a target='_blank' href='https://coolify.io/docs'>https://coolify.io/docs</a> <br> Discord: <a target='_blank'  href='https://coollabs.io/discord'>https://coollabs.io/discord</a>");
            } else {
                return false;
            }
        }
        return true;
    }
}
