#!/usr/bin/env python3
# -*- coding:utf-8 -*-
from inc import CliTool
import sys, os, datetime

app = sys.argv[1]
isIntra = (sys.argv[2] == 'intra')
if isIntra:
    account = sys.argv[3]
    env = sys.argv[4]
    mode = sys.argv[5]
    mode2 = sys.argv[6] if mode in ['api', 'web'] else ''

    fileName = {
        'dddz': '/hosts-honor-ddy-dz.txt',
        'ddry': '/hosts-honor-ddy-ry.txt',
        'ddtbk': '/hosts-honor-ddy-tbk.txt'
    }.get(account, '/hosts-honor-ddy-ms.txt')

else:
    env = sys.argv[3]
    mode = sys.argv[4]
    mode2 = sys.argv[5] if mode in ['api', 'web'] else ''
    fileName = {
        'honor-ddry-order': '/hosts-honor-ddy-ry.txt',
        'honor-ddtbk-order': '/hosts-honor-ddy-tbk.txt'
    }.get(app, '/hosts-honor-ddy.txt')

module = 'www/' + app
if  app in ['honor-ddry-order', 'honor-ddtbk-order']:
    app = 'honor-dd-order'
    module = 'www/' + ((app + '-pre') if env == 'pre' else app)

filePath = os.path.dirname(sys.argv[0]) + fileName

ipsMap = CliTool.getIpsMap(filePath, isIntra, 8873, module)

envList = CliTool.getEnvList(env, ipsMap, isIntra)

ips = {}
for env in envList:
    ips = dict(ips, **ipsMap[env])

if isIntra is True:
    localPwdFile = '/home/porsche/publish/tjds1.passwd'
else:
    localPwdFile = '/Users/tangjianhui/Documents/publish/tjds1.passwd'

if isIntra is True:
    localSrc = '/alidata/www/' + app + '/'
else:
    localSrc =  CliTool.workspace() + app + '.git' + '/'

exclude_ext = ' --exclude=/node_modules/ ' if (isIntra is False and app == 'node-ms-cloud') else ''

if (app in ['honor-dd-order-v2', 'honor-dddz-order-v2', 'honor-dddz-v2', 'honor-dd-v2']) and (mode in ['api', 'web']):
    exclude_ext += ' --include=/api/ --exclude=/web/* ' if (mode == 'api') else ' --exclude=/api/* --include=/web/dist/ --include=/web/distv1/ '
    mode = mode2
    

cmdTpl = 'rsync -%s --delay-updates --del --stats --port=%s --password-file=' + localPwdFile + ' --timeout=120 ' + CliTool.excludeFile() + exclude_ext + localSrc + ' www@%s::%s/'

Ct = CliTool()

syntax_check = False if isIntra is True else True
Ct.publish(ips, mode, cmdTpl, php_syntax_check = syntax_check)