#!/usr/bin/env python3
from os import environ
from os.path import abspath, isfile, join, relpath
from sys import argv

from bundlewrap.repo import Repository


path = environ.get('BW_REPO_PATH', '.')
repo = Repository(path)

if len(argv) < 3:
    print('Usage: {} <source> <target> [encryption key, default \'encrypt\']'.format(argv[0]))
    exit(1)

target = abspath(argv[2])
datapath = join(abspath(path), 'data')

if not isfile(argv[1]):
    print('ERROR: Source file \'{}\' does not exist.'.format(argv[1]))
    exit(1)

if not target.endswith('.vault'):
    print('ERROR: Target file \'{}\' does not end in .vault'.format(argv[2]))
    exit(1)
elif not target.startswith(datapath):
    print('ERROR: Target file \'{}\' is not in BW_REPO_PATH/data/'.format(argv[2]))
    exit(1)

if isfile(target):
    if input('ERROR: Target file \'{}\' already exists, overwrite? [yN]'.format(argv[2])) not in ['y', 'Y']:
        print('Abort')
        exit(2)

if len(argv) > 3:
    key = argv[3]
else:
    key = 'encrypt'

repo.vault.encrypt_file(argv[1], relpath(target, start=datapath), key)

print('encryption successful')
