use strict;
use warnings;
use LWP::UserAgent;
use HTTP::Request::Common qw(POST);
use JSON;

# ── SAO AUTH Configuration ─────────────────────────────────────────────────
my $BASE_URL    = "https://saoauth.com/api/client/auth";
my $APP_NAME    = "YOUR_APP_NAME";
my $OWNER_ID    = "YOUR_OWNER_ID";
my $APP_SECRET  = "YOUR_APP_SECRET";
my $APP_VERSION = "1.0";

# ── License Authentication ────────────────────────────────────────────────
sub auth_license {
    my ($key, $hwid) = @_;
    my $ua  = LWP::UserAgent->new(timeout => 15);
    my $res = $ua->post($BASE_URL, [
        auth_type => 'license',
        key       => $key,
        hwid      => $hwid,
        ownerid   => $OWNER_ID,
        secret    => $APP_SECRET,
        version   => $APP_VERSION,
    ]);
    die 'Request failed: ' . $res->status_line unless $res->is_success;
    return decode_json($res->decoded_content);
}

# ── User Login ────────────────────────────────────────────────────────────
sub auth_user_login {
    my ($username, $password, $hwid) = @_;
    my $ua  = LWP::UserAgent->new(timeout => 15);
    my $res = $ua->post($BASE_URL, [
        auth_type => 'user_login',
        username  => $username,
        password  => $password,
        hwid      => $hwid,
        ownerid   => $OWNER_ID,
        secret    => $APP_SECRET,
        version   => $APP_VERSION,
    ]);
    die 'Request failed: ' . $res->status_line unless $res->is_success;
    return decode_json($res->decoded_content);
}

# ── Main ──────────────────────────────────────────────────────────────────
my $result = auth_license('YOUR_LICENSE_KEY', 'YOUR_HWID');
if ($result->{success}) {
    print "Authenticated!\n";
    print "Session token : " . $result->{session_token} . "\n";
    print "Expires at    : " . ($result->{expires_at} // 'Permanent') . "\n";
    print "Sub level     : " . ($result->{sub_level} // 0) . "\n";
} else {
    print "Auth failed: " . $result->{error} . "\n";
}
