from ConfigParser import ConfigParser
import os
import platform

def get_config_dir(make=False):
  if platform.system() == 'Windows':
    config_suffix = os.path.join('AppData', 'Local', 'ed_tools')
  else:
    config_suffix = '.ed_tools'
  
  return os.path.join(os.path.expanduser('~'), config_suffix)

def get_settings(use_gui=True, parent=None):
  """
  Try to read the settings from file into ConfigParser object.
  If the config file isn't found, return None.
  """
  filename = os.path.join(get_config_dir(), 'settings.conf')
  settings = ConfigParser()
  
  if os.path.isfile(filename):
    settings.read(filename)
    return settings
  else:
    try:
      os.makedirs(get_config_dir())
    except:
      pass
    return None

def settings_update_ship(settings, ship_id, ship_name):
  # We include this check for backwards-compatibility.
  if not settings.has_section('ships'):
    settings.add_section('ships')

  settings.set('ships', str(ship_id), ship_name)
  write_settings(settings)

def update_settings(config_func, settings=None):
  """
  This function will initialize settings if it is None, call the passed function
  with the settings object as a parameter, then write the settings to the config
  file.
  """
  if settings is None:
    settings = ConfigParser()

  for section in ('ed_companion', 'inara', 'ships'):
    if not settings.has_section(section):
      settings.add_section(section)

  config_func(settings)
  write_settings(settings)

  return settings

def write_settings(settings):
  with open(os.path.join(get_config_dir(), 'settings.conf'), 'wb') as f:
    settings.write(f)