#!/usr/bin/env perl
use strict;
use warnings;

use lib "lib";

use Getopt::Long;
use App::PasswordManager;

my $manager = App::PasswordManager->new();

sub show_help {
    print <<"END_HELP";
Usage: $0 [options]

Options:
  --add <login> <password>       Add a new password
  --list                         List all stored logins
  --delete <login>               Delete a password for a specific login
  --edit <login> <new_password>  Edit an existing password
  --copy <login>                 Copy password to clipboard
  --help                         Show this help message

Examples:
  $0 --add "my_login" "my_password"
  $0 --list
  $0 --delete "my_login"
  $0 --edit "my_login" "new_password"
  $0 --copy "my_login"
END_HELP
    exit;
}

my ($add_login, $add_password, $list, $delete, $edit_login, $edit_password, $copy, $help);

GetOptions(
    'add=s{2}'    => \my @add_args,
    'list'        => \$list,
    'delete=s'    => \$delete,
    'edit=s{2}'   => \my @edit_args,
    'copy=s'      => \$copy,
    'help'        => \$help,
) or die "Invalid options passed. Use --help for usage information.\n";

if ($help) {
    show_help();
} elsif (@add_args == 2) {
    my ($login, $password) = @add_args;
    eval {
        $manager->add_password($login, $password);
        print "Password for '$login' added successfully.\n";
    };
    if ($@) {
        print "Error: $@\n";
    }
} elsif ($list) {
    my $passwords = $manager->list_passwords();
    if (@$passwords) {
        my $index = 1;
        for my $login (@$passwords) {
            print "$index. $login\n";
            $index++;
        }
    } else {
        print "No passwords found.\n";
    }
} elsif ($delete) {
    eval {
        $manager->remove_password($delete);
        print "Password for '$delete' removed successfully.\n";
    };
    if ($@) {
        print "Error: $@\n";
    }
} elsif (@edit_args == 2) {
    my ($login, $new_password) = @edit_args;
    eval {
        $manager->edit_password($login, $new_password);
        print "Password for '$login' updated successfully.\n";
    };
    if ($@) {
        print "Error: $@\n";
    }
} elsif ($copy) {
    eval {
        $manager->copy_to_clipboard($copy);
        print "Password for '$copy' copied to clipboard.\n";
    };
    if ($@) {
        print "Error: $@\n";
    }
} else {
    print "No valid options provided. Use --help for usage information.\n";
    exit 1;
}
