#!/usr/bin/env python

from __future__ import absolute_import

import os
import subprocess
import sys
import sqlite3
import argparse
from ansible_toolset import consts as C
from ansible_toolset.utils import *
from ansible_toolset.ansible.auto import AnsibleAdapter
from ansible_toolset.vault import VaultManager
from ansible_toolset.models import init_models

try:
    init_models(C.ANSIBLE_TOOLSET_DB)
    ansible = AnsibleAdapter(vault_password=get_ansible_vault_password())

    parser = argparse.ArgumentParser()
    parser.add_argument("action", choices=["open", "close", "list", "grep", "rgrep", "create"])
    parser.add_argument("argument", nargs="?")
    args = parser.parse_args()

    vaultManager = VaultManager(ansible=ansible)

    if args.action == "open":
        vaultManager.open()
    elif args.action == "close":
        vaultManager.close()
    elif args.action == "list":
        print("Known vaults under this directory:")
        for item in vaultManager.list():
            print(" * {} [{}]".format(os.path.relpath(item["path"], os.getcwd()), item["state"]))
    elif args.action in ["grep", "rgrep"]:
        use_regex = args.action == "rgrep"

        for item in vaultManager.grep(args.argument or "", use_regex=use_regex):
            print("{}:{}:{}".format(item["short_path"], item["line_number"], item["line"]))
    elif args.action == "create":
        vaultManager.create(args.argument)
except ErrorMessage as e:
    print(e)
