"""
Identifier:     ifs_sim/tests/test_ifs_sim.py
Name:           test_ifs_sim.py
Description:    Test ifs sim.
Author:         Zhaojun Yan
Created:        2024-04-09
Modified-History:
    2024-04-09, Zhaojun Yan, created

"""

import unittest
import os
from csst_ifs_sim import csst_ifs_sim

import sys

# sys.path.append('IFS_git/csst_ifs_sim/csst_ifs_sim')


class TestDemoFunction(unittest.TestCase):
    def test_ifs_sim_1(self):
        """
        Aim
        ---
        Test ifs sim function: SCI case.

        Criteria
        --------
        Pass if the demo function returns `1`.

        Details
        -------
        The demo function returns the length of the input argument list.
        This case aims to test whether the demo function returns `1` if input is `None`.
        """
        # demo function test
        dir_path = os.path.join(os.environ['UNIT_TEST_DATA_ROOT'], 'ifs_sim/')
        print(dir_path)
        print(sys.version)
        # ##configfile = dir_path+'IFS_inputdata/configData/IFS_sim_C10.config'

        configfile = './csst_ifs_sim/ifs_data/IFS_sim_C10.config'

        sourcein = 'SCI'
        print(configfile)

        debug = True

        result_path = dir_path+'ifs_sim_result'

        csst_ifs_sim.runIFSsim(sourcein, configfile,
                               dir_path, result_path, 1, debug, 'no')

        self.assertEqual(
            1, 1,
            "case 1: SCI sim passes.",
        )

        ##############################################################
    def test_ifs_sim_2(self):
        """
        Aim
        ---
        Test ifs sim function: SCI case.

        Criteria
        --------
        Pass if the demo function returns `1`.

        Details
        -------
        The demo function returns the length of the input argument list.
        This case aims to test whether the demo function returns `1` if input is `None`.
        """
        # demo function test
        dir_path = os.path.join(os.environ['UNIT_TEST_DATA_ROOT'], 'ifs_sim/')
        print(dir_path)
        print(sys.version)
        # ##configfile = dir_path+'IFS_inputdata/configData/IFS_sim_C10.config'

        configfile = './csst_ifs_sim/ifs_data/IFS_sim_C10.config'

        sourcein = 'BIAS'
        print(configfile)

        debug = True
        result_path = dir_path+'ifs_sim_result'

        csst_ifs_sim.runIFSsim(sourcein,  configfile,
                               dir_path, result_path, 1, debug, 'no')

        self.assertEqual(
            1, 1,
            "case 2:  sim passes.",
        )

        ###################################################################
    def test_ifs_sim_3(self):
        """
        Aim
        ---
        Test ifs sim function: SCI case.

        Criteria
        --------
        Pass if the demo function returns `1`.

        Details
        -------
        The demo function returns the length of the input argument list.
        This case aims to test whether the demo function returns `1` if input is `None`.
        """
        # demo function test
        dir_path = os.path.join(os.environ['UNIT_TEST_DATA_ROOT'], 'ifs_sim/')
        print(dir_path)
        print(sys.version)
        # ##configfile = dir_path+'IFS_inputdata/configData/IFS_sim_C10.config'

        configfile = './csst_ifs_sim/ifs_data/IFS_sim_C10.config'

        sourcein = 'DARK'
        print(configfile)

        debug = True
        result_path = dir_path+'ifs_sim_result'

        csst_ifs_sim.runIFSsim(sourcein,  configfile,
                               dir_path, result_path, 1, debug, 'no')

        self.assertEqual(
            1, 1,
            "case 3:  sim passes.",
        )

    ###################################################################
    def test_ifs_sim_4(self):
        """
        Aim
        ---
        Test ifs sim function: SCI case.

        Criteria
        --------
        Pass if the demo function returns `1`.

        Details
        -------
        The demo function returns the length of the input argument list.
        This case aims to test whether the demo function returns `1` if input is `None`.
        """
        # demo function test
        dir_path = os.path.join(os.environ['UNIT_TEST_DATA_ROOT'], 'ifs_sim/')
        print(dir_path)
        print(sys.version)
        # ##configfile = dir_path+'IFS_inputdata/configData/IFS_sim_C10.config'

        configfile = './csst_ifs_sim/ifs_data/IFS_sim_C10.config'

        sourcein = 'LAMP'
        print(configfile)

        debug = True

        result_path = dir_path+'ifs_sim_result'

        csst_ifs_sim.runIFSsim(sourcein,  configfile,
                               dir_path, result_path, 1, debug, 'no')

        self.assertEqual(
            1, 1,
            "case 4:  sim passes.",
        )

    ###################################################################
    def test_ifs_sim_5(self):
        """
        Aim
        ---
        Test ifs sim function: SCI case.

        Criteria
        --------
        Pass if the demo function returns `1`.

        Details
        -------
        The demo function returns the length of the input argument list.
        This case aims to test whether the demo function returns `1` if input is `None`.
        """
        # demo function test
        dir_path = os.path.join(os.environ['UNIT_TEST_DATA_ROOT'], 'ifs_sim/')
        print(dir_path)
        print(sys.version)
        # ##configfile = dir_path+'IFS_inputdata/configData/IFS_sim_C10.config'

        configfile = './csst_ifs_sim/ifs_data/IFS_sim_C10.config'

        sourcein = 'LAMP'
        print(configfile)

        debug = True
        result_path = dir_path+'ifs_sim_result'

        csst_ifs_sim.runIFSsim(sourcein,  configfile,
                               dir_path, result_path, 1, debug, 'yes')
        self.assertEqual(
            1, 1,
            "case 5:  sim passes.",
        )

    ###################################################################
    def test_ifs_sim_6(self):
        """
        Aim
        ---
        Test ifs sim function: SCI case.

        Criteria
        --------
        Pass if the demo function returns `1`.

        Details
        -------
        The demo function returns the length of the input argument list.
        This case aims to test whether the demo function returns `1` if input is `None`.
        """
        # demo function test
        dir_path = os.path.join(os.environ['UNIT_TEST_DATA_ROOT'], 'ifs_sim/')
        print(dir_path)
        print(sys.version)
        # ##configfile = dir_path+'IFS_inputdata/configData/IFS_sim_C10.config'

        configfile = './csst_ifs_sim/ifs_data/IFS_sim_C10.config'

        sourcein = 'FLAT'
        print(configfile)

        debug = True

        result_path = dir_path+'ifs_sim_result'

        csst_ifs_sim.runIFSsim(sourcein,  configfile,
                               dir_path, result_path, 1, debug, 'no')
        self.assertEqual(
            1, 1,
            "case 6:  sim passes.",
        )
