#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Licensed under a 3-clause BSD license.
#
# @Author: Brian Cherinka
# @Date:   2016-11-22 07:47:00
# @Last modified by:   Brian Cherinka
# @Last Modified time: 2016-11-22 08:42:54
#
# This is a script to check various Python and Marvin paths

from __future__ import print_function, division
import os
import sys
import numpy
import matplotlib

# Check the Python system version
print('\nSystem Checks')
sysver = sys.version
vinfo = sys.version_info
print('Your Python Version: {0}.{1}.{2}'.format(vinfo.major, vinfo.minor, vinfo.micro))
print('Full Version: {0}'.format(sysver))
ispy2 = 2 == vinfo.major
ispy3 = 3 == vinfo.major
if ispy3:
    raise RuntimeError('Python 3 not yet supported by Marvin.  Use Python 2.7')

# Anaconda checks
print('\nDistribution Checks')
isconda = 'Anaconda' in sysver or 'Miniconda' in sysver
print('Is Python from Anaconda or Miniconda? {0}'.format(isconda))

if isconda:
    isnumpyconda = 'conda' in numpy.__file__
    ismatplotlibconda = 'conda' in matplotlib.__file__
    print('Is Numpy from Anaconda or Miniconda? {0}'.format(isnumpyconda))
    print('Is Matplotlib from Anaconda or Miniconda? {0}'.format(ismatplotlibconda))

print('\nPackage Checks')
mplbackend = matplotlib.get_backend()
print('Numpy version: {0}'.format(numpy.__version__))
print('Matplotlib version: {0}'.format(matplotlib.__version__))
print('Your Matplotlib backend is {0}'.format(mplbackend))

# netrc path
print('\nNetrc Checks')
netrc = os.path.join(os.path.expanduser('~'), '.netrc')
isnet = os.path.isfile(netrc)
print('Have a .netrc file? {0}'.format(isnet))
if isnet:
    goodnet = oct(os.stat(netrc).st_mode)[-3:] == '600'
    print('Netrc with permissions 600? {0}'.format(goodnet))

#  Marvin Checks
print('\nMarvin Checks')
try:
    import marvin
except Exception as e:
    traceback = sys.exc_info()[2]
    raise ImportError('Marvin cannot be imported! {0}\n{1}'.format(e, traceback))
else:
    marvinmode = marvin.config.mode is not None
    print('Marvin imported? {0}'.format(marvinmode))
    marvinmap = True if marvin.config.urlmap else False
    print('Does Marvin have a URLMap for API use? {0}'.format(marvinmap))
    print('DB connected?', marvin.marvindb.isdbconnected)

    # check for paths
    sasbasedir = os.environ.get('SAS_BASE_DIR', None)
    manga_redux = os.environ.get('MANGA_SPECTRO_REDUX', None)
    manga_analysis = os.environ.get('MANGA_SPECTRO_ANALYSIS', None)
    drpallpath = marvin.config.drpall
    treedir = os.environ.get('TREE_DIR', None)
    braindir = os.environ.get('MARVIN_BRAIN_DIR', None)
    sdss_access = os.environ.get('SDSS_ACCESS_DIR', None)

    print('\nMarvin Paths:')
    print('$SAS_BASE_DIR: ', sasbasedir)
    print('$MANGA_SPECTRO_REDUX: ', manga_redux)
    print('$MANGA_SPECTRO_ANALYSIS: ', manga_analysis)
    print('$TREE_DIR: ', treedir)
    print('$MARVIN_BRAIN_DIR: ', braindir)
    print('$SDSS_ACCESS_DIR: ', sdss_access)
    print('DRPall Path: ', drpallpath)


