#!/usr/bin/env raku
use lib $?FILE.IO.resolve.parent.parent.child('lib').absolute;
use Nimala::Raku-LSP;

#| Nimala Raku Language Server Protocol (LSP) Daemon
sub MAIN(
    Bool :$stdio = False,            #= Run in standard I/O pipe mode (default)
    Int :p(:$port),                  #= TCP port to listen on (e.g. --port=5007 or -p 5007)
    Str :$host = '127.0.0.1',        #= TCP host address to bind to (default: 127.0.0.1)
    Str :$tcp,                       #= TCP endpoint in host:port format (e.g. --tcp=127.0.0.1:5007)
    Bool :$single-session = False    #= Terminate daemon after client disconnection
) {
    if $tcp {
        my @parts = $tcp.split(':');
        my Str $tcp-host = @parts.elems > 1 ?? @parts[0] !! '127.0.0.1';
        my Int $tcp-port = +(@parts.elems > 1 ?? @parts[1] !! @parts[0]);
        run-tcp-server(:host($tcp-host), :port($tcp-port), :$single-session);
    }
    elsif $port.defined {
        run-tcp-server(:$host, :$port, :$single-session);
    }
    else {
        # Default to standard I/O pipes
        my Int $code = run-server();
        exit($code);
    }
}
