# -*- coding: utf-8 -*-
"""
Tests of neo.io.neuroshareio
"""

# needed for python 3 compatibility
from __future__ import absolute_import, division

import sys
import os
import tarfile
import zipfile
import tempfile
import platform

import unittest

try:
    from urllib import urlretrieve  # Py2
except ImportError:
    from urllib.request import urlretrieve  # Py3

from neo.io import NeuroshareIO
from neo.test.iotest.common_io_test import BaseTestIO


@unittest.skipUnless(sys.platform.startswith("win"), "Only works on Windows")
class TestNeuroshareIO(unittest.TestCase, BaseTestIO):
    ioclass = NeuroshareIO
    files_to_test = []
    files_to_download = ['Multichannel_fil_1.mcd', ]

    def setUp(self):
        BaseTestIO.setUp(self)
        if sys.platform.startswith('win'):
            distantfile = 'http://download.multichannelsystems.com/download_data/software/neuroshare/nsMCDLibrary_3.7b.zip'
            localfile = os.path.join(tempfile.gettempdir(), 'nsMCDLibrary_3.7b.zip')
            if not os.path.exists(localfile):
                urlretrieve(distantfile, localfile)
            if platform.architecture()[0].startswith('64'):
                self.dllname = os.path.join(
                    tempfile.gettempdir(),
                    'Matlab/Matlab-Import-Filter/Matlab_Interface/nsMCDLibrary64.dll')
                if not os.path.exists(self.dllname):
                    zip = zipfile.ZipFile(localfile)
                    zip.extract(
                        'Matlab/Matlab-Import-Filter/Matlab_Interface/nsMCDLibrary64.dll',
                        path=tempfile.gettempdir())
            else:
                self.dllname = os.path.join(
                    tempfile.gettempdir(),
                    'Matlab/Matlab-Import-Filter/Matlab_Interface/nsMCDLibrary.dll')
                if not os.path.exists(self.dllname):
                    zip = zipfile.ZipFile(localfile)
                    zip.extract(
                        'Matlab/Matlab-Import-Filter/Matlab_Interface/nsMCDLibrary.dll',
                        path=tempfile.gettempdir())

        elif sys.platform.startswith('linux'):
            if platform.architecture()[0].startswith('64'):
                distantfile = 'http://download.multichannelsystems.com/download_data/software/neuroshare/nsMCDLibrary_Linux64_3.7b.tar.gz'
                localfile = os.path.join(tempfile.gettempdir(), 'nsMCDLibrary_Linux64_3.7b.tar.gz')
            else:
                distantfile = 'http://download.multichannelsystems.com/download_data/software/neuroshare/nsMCDLibrary_Linux32_3.7b.tar.gz'
                localfile = os.path.join(tempfile.gettempdir(), 'nsMCDLibrary_Linux32_3.7b.tar.gz')
            if not os.path.exists(localfile):
                urlretrieve(distantfile, localfile)
            self.dllname = os.path.join(tempfile.gettempdir(), 'nsMCDLibrary/nsMCDLibrary.so')
            if not os.path.exists(self.dllname):
                tar = tarfile.open(localfile)
                tar.extract('nsMCDLibrary/nsMCDLibrary.so', path=tempfile.gettempdir())
        else:
            raise unittest.SkipTest("Not currently supported on OS X")

    def test_with_multichannel(self):
        filename0 = self.get_filename_path(self.files_to_download[0])
        reader = NeuroshareIO(filename0, self.dllname)
        blocks = reader.read()
        n = len(blocks[0].segments[0].analogsignals)
        assert n == 2, \
            'For {} , nb AnalogSignal: {} (should be 2)'.format(self.files_to_download[0], n)


if __name__ == "__main__":
    unittest.main()
