defaults = repository.create(factory.configurationItem('Environments/Defaults', 'udm.Dictionary',
                                                       {
                                                           'entries': {'usr': 'admin', 'PLACE_HOLDER': 'value'},
                                                           'encryptedEntries': {'secret': 'superSecureValue'}
                                                       }))

historyDict = repository.create(
    factory.configurationItem('Environments/HistoryDict', 'udm.Dictionary', {'entries': {'one': '1'}}))
historyDict['entries']['two'] = '2'
historyDict = repository.update(historyDict)
historyDict['entries']['three'] = '3'
historyDict = repository.update(historyDict)
historyDict['entries']['four'] = '4'
repository.update(historyDict)

# Infra and Environment
hosts = []
hostDicts = [defaults.id]
for x in range(1, 21):
    hostId = "Infrastructure/host%d" % x
    repository.create(factory.configurationItem(hostId, 'overthere.LocalHost', {'os': 'UNIX'}))
    hosts.append(hostId)
    if x < 3:
        command = "sleep 5" if x % 2 == 1 else "bedtime five"
        hostDict = repository.create(factory.configurationItem("Environments/hostdict%d" % x, 'udm.Dictionary',
                                                               {'entries': {'cmd': command},
                                                                'restrictToContainers': [hostId]}))
        hostDicts.append(hostDict.id)

sameHostId = "Infrastructure/sameHost"
sameHost = repository.create(factory.configurationItem(sameHostId, 'overthere.LocalHost', {'os': 'UNIX'}))
repository.create(factory.configurationItem('Environments/EnvsWithSameHost', 'core.Directory'))
for x in range(1, 21):
    envId = "Environments/EnvsWithSameHost/EnvWithSameHost%d" % x
    repository.create(factory.configurationItem(envId, 'udm.Environment',
                                                {'dictionaries': [defaults.id], 'members': [sameHostId]}))

repository.create(factory.configurationItem('Environments/Env1', 'udm.Environment', {'dictionaries': [defaults.id]}))
repository.create(factory.configurationItem('Environments/EnvWithRequiredChecklist', 'udm.Environment',
                                            {'dictionaries': [defaults.id], 'members': ['Infrastructure/host12'],
                                             'requiresReleaseNotes': True, 'requiresPerformanceTested': True,
                                             'requiresChangeTicketNumber': True}))
repository.create(factory.configurationItem('Environments/MultiHostEnv', 'udm.Environment',
                                            {'members': hosts[3:5], 'dictionaries': [defaults.id]}))
repository.create(factory.configurationItem('Environments/Staging', 'udm.Environment',
                                            {'dictionaries': [defaults.id], 'members': ['Infrastructure/host2']}))
repository.create(factory.configurationItem('Environments/Sandbox', 'udm.Environment',
                                            {'dictionaries': [defaults.id], 'members': ['Infrastructure/host2']}))
repository.create(factory.configurationItem('Environments/StagingNoDefaults', 'udm.Environment',
                                            {'members': ['Infrastructure/host3']}))
repository.create(
    factory.configurationItem('Environments/TestDirEnv', 'core.Directory', {'dictionaries': [defaults.id]}))
repository.create(
    factory.configurationItem('Environments/TestDirEnv/Env2', 'udm.Environment', {'dictionaries': [defaults.id]}))
repository.create(factory.configurationItem('Environments/EnvWithDictionaries', 'udm.Environment',
                                            {'dictionaries': hostDicts, 'members': hosts[9:11]}))

hostForUpdate = repository.create(
    factory.configurationItem('Infrastructure/HostForUpdateScenario', 'overthere.LocalHost', {'os': 'UNIX'}))
repository.create(factory.configurationItem('Environments/EnvForUpdateScenario', 'xl.Environment',
                                            {'members': [hostForUpdate.id], 'dictionaries': [defaults.id]}))

exampleHost = repository.create(
    factory.configurationItem('Infrastructure/ExampleHost', 'overthere.LocalHost', {'os': 'UNIX'}))
exampleServer = repository.create(
    factory.configurationItem('Infrastructure/ExampleHost/ExampleServer', 'example.Server', {'home': '/tmp'}))

exampleHostWithTags = repository.create(
    factory.configurationItem('Infrastructure/ExampleHostWithTags', 'overthere.LocalHost',
                              {'os': 'UNIX', 'tags': ['tag1', 'tag2', 'hostTag', 'deployTag']}))

members = [exampleHost.id, exampleServer.id, exampleHostWithTags.id]
for i in range(1, 10):
    host = repository.create(
        factory.configurationItem('Infrastructure/ExampleHostWithTags' + str(i), 'overthere.LocalHost',
                                  {'os': 'UNIX', 'tags': ['tag1', 'tag2', 'tag' + str(i)]}))

    members.append(host.id)

repository.create(factory.configurationItem('Environments/EnvForExampleHostWithTags', 'xl.Environment',
                                            {'members': members}))

repository.create(factory.configurationItem('Environments/EnvForExampleHost', 'xl.Environment',
                                            {'members': [exampleHost.id, exampleServer.id]}))

tcHost = repository.create(factory.configurationItem('Infrastructure/TcHost', 'overthere.LocalHost', {'os': 'UNIX'}))
tcServer = repository.create(
    factory.configurationItem('Infrastructure/TcHost/TcServer', 'tc.Tomcat', {'home': '/etc/'}))
repository.create(
    factory.configurationItem('Environments/TcEnvHost', 'xl.Environment', {'members': [tcHost.id, tcServer.id]}))

host = repository.create(factory.configurationItem('Infrastructure/jboss-host', 'overthere.SshHost',
                                                   {'connectionType': 'SFTP', 'address': 'jboss-7', 'username': 'root',
                                                    'password': 'centos', 'os': 'UNIX'}))
jboss = factory.configurationItem('Infrastructure/jboss-host/jboss-domain', 'jbossdm.Domain',
                                  {'home': '/opt/jboss/7', 'host': 'Infrastructure/jboss-host',
                                   'username': "jbossAdmin", "password": "jboss"})
