use lib '../lib';
use App::bsky;
exit App::bsky::CLI->new->run(@ARGV);
__END__

=encoding utf-8

=head1 NAME

bsky - A Command-line Bluesky Client

=head1 SYNOPSIS

    # create user session
    $ bsky login [handle] [password]

    # view recent posts
    $ bsky timeline ...

    # create a post
    $ bsky post ...

=head1 DESCRIPTION

C<bsky> is a simple command line client for Bluesky in Perl.

=head1 Usage

   bsky [global options] command [command options] [arguments...]

=head1 Commands

=head2 config

    # Print all configuration values
    bsky config

    # Print a single config value and exit
    bsky config wrap

    # Set a configuration value
    bsky config wrap 100

View or change configuration values. See L<Configuration|/Configuration> for a list of current options.

=head3 Options

    key         optional
    value       optional

=head2 show-profile

    bsky show-profile

    bsky show-profile --handle sankor.bsky.social

    bsky show-profile --json

Show profile.

=head3 Options

    --handle handle     user handle; defaults to the logged in account
    -H handle           alternative to --handle
    --json              boolean flag; content is printed as JSON objects if given

=head2 update-profile

    bsky update-profile --description "Looks like we made it!"

    bsky update-profile --name "John Smith"

    bsky update-profile --avatar https://cataas.com/cat?width=100 --banner https://cataas.com/cat?width=1000

Update profile elements.

=head3 Options

    --avatar        optional, avatar image (url or local path)
    --banner        optional, banner image (url or local path)
    --description   optional, blurb about yourself
    --name          optional, display name

=head2 show-session

    bsky show-session

    bsky show-session --json

Show current session.

=head3 Options

    --json              boolean flag; content is printed as JSON objects if given

=head2 timeline

    bsky timeline

    bsky timeline --json

    # shorthand:
    bsky tl

Display posts from timeline.

=head3 Options

    --json      boolean flag; content is printed as JSON objects if given

=head2 thread

Show thread.

TODO

=head2 post

post new text

=head2 vote

    bsky vote [uri] --down

Vote on the post.

TODO

=head3 Options

    uri
    --down      optional, if true, a downvote is cast, otherwise, the post is voted up

=head2 votes

    bsky votes [uri]

Show votes of the post.

TODO

=head3 Options

    uri

=head2 repost

    bsky repost [uri]

Repost the post.

TODO

=head3 Options

    uri

=head2 reposts

    bsky reposts [uri]

Show reposts of the post.

TODO

=head3 Options

    uri

=head2 follow

    bsky follow [handle]

    bsky follow sankor.bsky.social

    bsky follow did:plc:2lk3pbakx2erxgotvzyeuyem

Follow the handle

=head3 Options

    handle          user handle or DID

=head2 unfollow

    bsky unfollow [handle]

    bsky unfollow sankor.bsky.social

    bsky unfollow did:plc:2lk3pbakx2erxgotvzyeuyem

Unfollow the handle

=head3 Options

    handle          user handle or DID

=head2 follows

    bsky follows

    bsky follows --handle sankor.bsky.social

    bsky follows --json

Show follows.

=head3 Options

    --handle handle     user handle; defaults to the logged in account
    -H handle           alternative to --handle
    --json              boolean flag; content is printed as JSON objects if given

=head2 followers

    bsky followers

    bsky followers --handle sankor.bsky.social

    bsky followers --json

Show followers.

=head3 Options

    --handle handle     user handle; defaults to the logged in account
    -H handle           alternative to --handle
    --json              boolean flag; content is printed as JSON objects if given

=head2 block

    bsky block [handle]

    bsky block sankor.bsky.social

    bsky block did:plc:2lk3pbakx2erxgotvzyeuyem

Block the handle.

=head3 Options

    handle          user handle or DID

=head2 unblock

    bsky unblock [handle]

    bsky unblock sankor.bsky.social

    bsky unblock did:plc:2lk3pbakx2erxgotvzyeuyem

Unblock the handle.

=head3 Options

    handle          user handle or DID

=head2 blocks

    bsky blocks

    bsky blocks --json

Show blocks.

=head3 Options

    --json              boolean flag; content is printed as JSON objects if given

=head2 delete

    bsky delete [cid]

Delete an item.

=head3 Options

    cid

=head2 notifications

    bsky notifications

    bsky notifications --all

    bsky notifications --json

    # shorthand
    bsky notif --all

Show notifications.

=head3 Options

    --all               boolean flag, show all notifications
    --json              boolean flag; content is printed as JSON objects if given

=head2 login

    bsky login [ident] [password] [--host http://bsky.social]

Log into a Bluesky account.

=head3 Options

    ident
    password
    --host        optional, defaults to https://bsky.social

=head2 help

shows a list of commands or help for one command

=head1 Global Options

   --help, -h     show help
   --version, -v  print the version
   -V             print verbose version info

=head1 Configuration

Current configuration values include:

=over

=item C<wrap>

    bsky config wrap 100

Sets word wrap width in characters for terminal output. The default is C<0> which disables word wrap.

=back

=head1 See Also

L<At>.pm

L<https://github.com/mattn/bsky> - Original Golang client

=head1 LICENSE

Copyright (C) Sanko Robinson.

This library is free software; you can redistribute it and/or modify it under the terms found in the Artistic License
2. Other copyrights, terms, and conditions may apply to data transmitted through this module.

=head1 AUTHOR

Sanko Robinson E<lt>sanko@cpan.orgE<gt>

=begin stopwords


=end stopwords

=cut
