#! /usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import print_function
import os
import re
import argparse
from azure.storage.blob import BlobServiceClient

parser = argparse.ArgumentParser()
parser.add_argument('-s', '--storage_account', help='storage account')
parser.add_argument('-c', '--container_name', help='container name')
parser.add_argument('-key', '--key', help='access key or SAS token')
parser.add_argument('-starts',
                    '--name_starts_with',
                    help='name starts with(defalut: \'\' )',
                    default='')
parser.add_argument('-bt',
                    '--blob_type',
                    help='blob type(defalut: f)',
                    default='f')
parser.add_argument('-sn',
                    '--short_name',
                    help='short name(defalut: f)}',
                    default='f')

args = parser.parse_args()

credential = getattr(args, 'key')
storage_account = getattr(args, 'storage_account')
container_name = getattr(args, 'container_name')
name_starts_with = getattr(args, 'name_starts_with')
blob_type = getattr(args, 'blob_type')
short_name = getattr(args, 'short_name')

if not storage_account:
    storage_account = os.environ.get('AZURE_STORAGE_ACCOUNT')
if not container_name:
    container_name = os.environ.get('AZURE_CONTAINER_NAME')
if not credential:
    credential = os.environ.get('AZURE_BLOB_KEY')

if not storage_account:
    print(
        'must provide storage_account or environment variable AZURE_STORAGE_ACCOUNT'
    )
    exit()
if not storage_account:
    print(
        'must provide container_name or environment variable AZURE_CONTAINER_NAME'
    )
    exit()
if not credential:
    print('must provide key or environment variable AZURE_BLOB_KEY')
    exit()

account_url = 'https://{storage_account}.blob.core.windows.net'.format(
    storage_account=storage_account)
service = BlobServiceClient(account_url=account_url, credential=credential)
container = service.get_container_client(container_name)
re_compile = re.compile('/.+$')

for x in list(container.list_blobs(name_starts_with=name_starts_with)):
    if x['name'].endswith('/') and blob_type == 'd':
        print(x['name'])
    elif not x['name'].endswith('/') and blob_type.lower() == 'f':
        if short_name.lower() == 't':
            print(re_compile.findall(x['name'])[0].replace('/', ''))
        else:
            print(x['name'])
