#include <iostream>

#include <qstring.h>

#include <kwallet.h>
#include <kapplication.h>
#include <kaboutdata.h>
#include <kcmdlineargs.h>

int main(int argc, char ** argv)
{
   std::cerr << "Starting askpass" << std::endl;
   if (argc < 2) {
      std::cerr << "Wrong number of arguments. Expecting 2 instead of " << argc
                << std::endl;
      return 1;
   }
   if (QString(argv[1]).contains("Bad passphrase")) {
      std::cerr << "Bad passphrase seen in request. Exiting." << std::endl;
      return 1;
   }
   if (not QString(argv[1]).contains("Enter passphrase for")) {
      std::cerr << "Could not find standard \"Enter passphrase for\" in request"
                << ". Exiting" << std::endl;
      return 1;
   }

   KAboutData aboutData("askpass", "", ki18n("KDE SSH KWallet Askpass"),
                         "", ki18n(""), KAboutData::License_GPL);


   KCmdLineOptions options;
   options.add("+[arg]");

   KCmdLineArgs::init(argc, argv, &aboutData);
   KCmdLineArgs::addCmdLineOptions(options);

   KApplication app;

   QString localwallet = KWallet::Wallet::LocalWallet();
   std::cerr << "Got name of local wallet!" << std::endl;
   KWallet::Wallet * wallet =  KWallet::Wallet::openWallet(localwallet, WId(0));
   std::cerr << "Got local wallet!" << std::endl;
   if (not wallet) {
      std::cerr << "Could not open the standard wallet. Exiting." << std::endl;
      delete wallet;
      return 1;
   }
   if (not wallet->hasFolder("SSH Askpass")) {
      std::cerr << "Could not find an \"SSH Askpass\" folder. Exiting."
                << std::endl;
      delete wallet;
      return 1;
   }
   if (not wallet->setFolder("SSH Askpass")) {
      std::cerr << "Could not switch to folder \"SSH Askpass\". Exiting."
                << std::endl;
      delete wallet;
      return 1;
   }

   QString key = "ssh-key";
   if (not wallet->hasEntry(key)) {
      std::cerr << "Folder \"SSH Askpass\" does not have entry \"ssh-key\"."
                << " Exiting." << std::endl;
      delete wallet;
      return 1;
   }

   QString password = "";
   int ret = wallet->readPassword(key, password);
   if (ret != 0) {
      std::cerr << "Could not read password for key \"ssh-key\" in folder "
                << "\"SSH Askpass\". Exiting." << std::endl;
      delete wallet;
      return 1;
   }
   std::cout << password.toLatin1().data() << std::endl;
   delete wallet;
   return 0;
}
