import os
import sys
import subprocess


def copy_lib():
    current_path = os.path.dirname(os.path.abspath(__file__))
    bcrypt_lib = os.path.join(current_path, "../../../lib/bcrypt/_bcrypt.abi3.so")
    if os.path.exists(bcrypt_lib):
        return
    source = os.path.join(current_path, '../../../lib/bcrypt/lib3.' + \
                          str(sys.version_info[1]), '_bcrypt.abi3.so')
    dest = os.path.join(current_path, '../../../lib/bcrypt/')
    cmd = f"cp {source} {dest}"
    (status, output) = subprocess.getstatusoutput(cmd)
    if status != 0:
        raise Exception("cp file failed.\nError:%s\nThe cmd is: %s\n" %
                        (output, cmd))

    source = os.path.join(current_path, '../../../lib/_cffi_backend_3.' + \
                          str(sys.version_info[1]), '_cffi_backend.so')
    dest = os.path.join(current_path, '../../../lib/')
    cmd = f"cp {source} {dest}"
    (status, output) = subprocess.getstatusoutput(cmd)
    if status != 0:
        raise Exception("cp file failed.\nError:%s\nThe cmd is: %s\n" %
                        (output, cmd))

    source = os.path.join(current_path, '../../../lib/cryptography/hazmat/bindings/lib3.' + \
                          str(sys.version_info[1]), '*.so')
    dest = os.path.join(current_path, '../../../lib/cryptography/hazmat/bindings/')
    cmd = f"cp {source} {dest}"
    (status, output) = subprocess.getstatusoutput(cmd)
    if status != 0:
        raise Exception("cp file failed.\nError:%s\nThe cmd is: %s\n" %
                        (output, cmd))

    source = os.path.join(current_path, '../../../lib/nacl/lib3.' + \
                          str(sys.version_info[1]), '_sodium.abi3.so')
    dest = os.path.join(current_path, '../../../lib/nacl/')
    cmd = f"cp {source} {dest}"
    (status, output) = subprocess.getstatusoutput(cmd)
    if status != 0:
        raise Exception("cp file failed.\nError:%s\nThe cmd is: %s\n" %
                        (output, cmd))


if __name__ == "__main__":
    copy_lib()