#include <stdio.h>

#include "src/sync.h"
#include "src/search.h"
#include "src/depinst.h"
#include "src/isinst.h"
#include "src/diff.h"

const char* sofname = "fugu";
const char* version = "0.0.1";

void help() {
  printf("076 fugu - OpenBSD向けのパッケージマネージャー\n");
  printf("https://076.moe/ | https://gitler.moe/suwako/fugu\n\n");
  printf("使い方:\n");
  printf("%s sync               :利用可能パッケージの一覧を更新\n", sofname);
  printf("%s sysup              :全てのペッケージを更新する\n", sofname);
  printf("%s diff               :更新出来るペッケージを表示する\n", sofname);
  printf("%s search <package>   :パッケージを検索\n", sofname);
  printf("%s update <package>   :パッケージを更新する\n", sofname);
  printf("%s remove <package>   :パッケージを削除\n", sofname);
  printf("%s depinst <package>  :パッケージをインストール\n", sofname);
  printf("%s isinst <package>   :パスワードがインストール済みかどうかを確認\n", sofname);
  printf("%s help               :ヘルプを表示\n", sofname);
  printf("%s version            :バージョンを表示\n", sofname);
}

int main(int argc, char **argv) {
  if (argc < 2) {
    help();
    return 1;
  }

  if (strcmp(argv[1], "search") == 0) {
    search(argv[2]);
  } else if (strcmp(argv[1], "sync") == 0) {
    sync();
  } else if (strcmp(argv[1], "depinst") == 0) {
    char chroot[1024];
    snprintf(chroot, sizeof(chroot), "/tmp/fugu/%s", argv[2]);
    const char *pkg = dlpkg(argv[2], chroot);
    if (pkg != NULL) {
      install(pkg, chroot);
      free((void *)pkg);
    } else {
      fprintf(stderr, "パッケージ「%s」をダウンロードに失敗。\n", argv[2]);
    }
  } else if (strcmp(argv[1], "diff") == 0) {
    diffinst();
  } else if (strcmp(argv[1], "update") == 0) {
    printf("TODO: update\n");
  } else if (strcmp(argv[1], "remove") == 0) {
    printf("TODO: remove\n");
  } else if (strcmp(argv[1], "sysup") == 0) {
    printf("TODO: sysup\n");
  } else if (strcmp(argv[1], "isinst") == 0) {
    for (size_t i = 2; i < argc; i++) {
      int chk = checkinst(argv[i]);

      // 結果
      if (chk == -1) {
        printf("%sは存在しない\n", argv[i]);
      } else if (chk == 1) {
        printf("%sは未インストール\n", argv[i]);
      } else if (chk == 0) {
        printf("%sはインストール済み\n", argv[i]);
      }
    }
  } else if (strcmp(argv[1], "version") == 0) {
    printf("%s-%s\n", sofname, version);
  } else {
    help();
  }

  return 0;
}