"""
   CloudEndpoint is a base class for the clients used to connect to different
   cloud providers
"""

from __future__ import print_function
from __future__ import division
from __future__ import absolute_import

import os

from DIRAC import S_ERROR, S_OK
from DIRAC.Resources.Cloud.Utilities import createUserDataScript, \
    createPilotDataScript, createCloudInitScript

__RCSID__ = '06435e342 (2021-07-08 14:47:56 +0100) Simon Fayer <sf105@ic.ac.uk>'


class Endpoint(object):
  """ Endpoint base class
  """

  def __init__(self, parameters=None, bootstrapParameters=None):
    # logger
    if not parameters:
      parameters = {}
    self.parameters = parameters
    if not bootstrapParameters:
      bootstrapParameters = {}
    self.bootstrapParameters = bootstrapParameters
    self.valid = False
    self.proxy = None

  def isValid(self):
    return self.valid

  def setParameters(self, parameters):
    self.parameters.update(parameters)

  def setBootstrapParameters(self, bootstrapParameters):
    self.bootstrapParameters.update(bootstrapParameters)

  def getParameterDict(self):
    return self.parameters

  def setProxy(self, proxy):
    self.proxy = proxy

  def getProxyFileLocation(self):
    if not self.proxy:
      self.proxy = self.parameters.get("Proxy", os.environ.get('X509_USER_PROXY'))
      if not self.proxy:
        return S_ERROR('Can not find proxy')
    return S_OK(self.proxy)

  def _createUserDataScript(self):

    bootType = self.bootstrapParameters.get('BootType', 'pilot')
    if bootType.lower() == 'pilot':
      return createPilotDataScript(self.parameters, self.bootstrapParameters)
    elif bootType.lower() == 'user':
      return createUserDataScript(self.parameters)
    elif bootType.lower() == 'cloudinit':
      return createCloudInitScript(self.parameters, self.bootstrapParameters)