# Pylint doesn't play well with fixtures and dependency injection from pytest
# pylint: disable=redefined-outer-name

import os
import pytest
from buildstream import _yaml
from buildstream.exceptions import ErrorDomain, LoadErrorReason
from buildstream.testing.runcli import cli  # pylint: disable=unused-import

# Project directory
DATA_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), "options")


@pytest.mark.datafiles(DATA_DIR)
@pytest.mark.parametrize(
    "project_dir",
    [("invalid-name-spaces"), ("invalid-name-dashes"), ("invalid-name-plus"), ("invalid-name-leading-number"),],
)
def test_invalid_option_name(cli, datafiles, project_dir):
    project = os.path.join(datafiles.dirname, datafiles.basename, project_dir)
    result = cli.run(project=project, silent=True, args=["show", "element.bst"])
    result.assert_main_error(ErrorDomain.LOAD, LoadErrorReason.INVALID_SYMBOL_NAME)


@pytest.mark.datafiles(DATA_DIR)
@pytest.mark.parametrize("project_dir", [("invalid-variable-name-spaces"), ("invalid-variable-name-plus"),])
def test_invalid_variable_name(cli, datafiles, project_dir):
    project = os.path.join(datafiles.dirname, datafiles.basename, project_dir)
    result = cli.run(project=project, silent=True, args=["show", "element.bst"])
    result.assert_main_error(ErrorDomain.LOAD, LoadErrorReason.INVALID_SYMBOL_NAME)


@pytest.mark.datafiles(DATA_DIR)
def test_invalid_option_type(cli, datafiles):
    project = os.path.join(datafiles.dirname, datafiles.basename, "invalid-type")

    # Test with the opt option set
    result = cli.run(
        project=project,
        silent=True,
        args=["--option", "opt", "funny", "show", "--deps", "none", "--format", "%{vars}", "element.bst"],
    )
    result.assert_main_error(ErrorDomain.LOAD, LoadErrorReason.INVALID_DATA)


@pytest.mark.datafiles(DATA_DIR)
def test_invalid_option_cli(cli, datafiles):
    project = os.path.join(datafiles.dirname, datafiles.basename, "simple-condition")

    # Test with the opt option set
    result = cli.run(
        project=project,
        silent=True,
        args=["--option", "fart", "funny", "show", "--deps", "none", "--format", "%{vars}", "element.bst"],
    )
    result.assert_main_error(ErrorDomain.LOAD, LoadErrorReason.INVALID_DATA)


@pytest.mark.datafiles(DATA_DIR)
def test_invalid_option_config(cli, datafiles):
    project = os.path.join(datafiles.dirname, datafiles.basename, "simple-condition")
    cli.configure({"projects": {"test": {"options": {"fart": "Hello"}}}})
    result = cli.run(
        project=project, silent=True, args=["show", "--deps", "none", "--format", "%{vars}", "element.bst"]
    )
    result.assert_main_error(ErrorDomain.LOAD, LoadErrorReason.INVALID_DATA)


@pytest.mark.datafiles(DATA_DIR)
def test_invalid_expression(cli, datafiles):
    project = os.path.join(datafiles.dirname, datafiles.basename, "invalid-expression")
    result = cli.run(
        project=project, silent=True, args=["show", "--deps", "none", "--format", "%{vars}", "element.bst"]
    )
    result.assert_main_error(ErrorDomain.LOAD, LoadErrorReason.EXPRESSION_FAILED)


@pytest.mark.datafiles(DATA_DIR)
def test_undefined(cli, datafiles):
    project = os.path.join(datafiles.dirname, datafiles.basename, "undefined-variable")
    result = cli.run(
        project=project, silent=True, args=["show", "--deps", "none", "--format", "%{vars}", "element.bst"]
    )
    result.assert_main_error(ErrorDomain.LOAD, LoadErrorReason.EXPRESSION_FAILED)


@pytest.mark.datafiles(DATA_DIR)
def test_invalid_condition(cli, datafiles):
    project = os.path.join(datafiles.dirname, datafiles.basename, "invalid-condition")
    result = cli.run(
        project=project, silent=True, args=["show", "--deps", "none", "--format", "%{vars}", "element.bst"]
    )
    result.assert_main_error(ErrorDomain.LOAD, LoadErrorReason.INVALID_DATA)


@pytest.mark.datafiles(DATA_DIR)
@pytest.mark.parametrize("opt_option,expected_prefix", [("False", "/usr"), ("True", "/opt"),])
def test_simple_conditional(cli, datafiles, opt_option, expected_prefix):
    project = os.path.join(datafiles.dirname, datafiles.basename, "simple-condition")

    # Test with the opt option set
    result = cli.run(
        project=project,
        silent=True,
        args=["--option", "opt", opt_option, "show", "--deps", "none", "--format", "%{vars}", "element.bst"],
    )
    result.assert_success()
    loaded = _yaml.load_data(result.output)
    assert loaded.get_str("prefix") == expected_prefix


@pytest.mark.datafiles(DATA_DIR)
@pytest.mark.parametrize(
    "debug,logging,expected",
    [("False", "False", "False"), ("True", "False", "False"), ("False", "True", "False"), ("True", "True", "True"),],
)
def test_nested_conditional(cli, datafiles, debug, logging, expected):
    project = os.path.join(datafiles.dirname, datafiles.basename, "nested-condition")

    # Test with the opt option set
    result = cli.run(
        project=project,
        silent=True,
        args=[
            "--option",
            "debug",
            debug,
            "--option",
            "logging",
            logging,
            "show",
            "--deps",
            "none",
            "--format",
            "%{vars}",
            "element.bst",
        ],
    )
    result.assert_success()
    loaded = _yaml.load_data(result.output)
    assert loaded.get_str("debug") == expected


@pytest.mark.datafiles(DATA_DIR)
@pytest.mark.parametrize(
    "debug,logging,expected",
    [("False", "False", "False"), ("True", "False", "False"), ("False", "True", "False"), ("True", "True", "True"),],
)
def test_compound_and_conditional(cli, datafiles, debug, logging, expected):
    project = os.path.join(datafiles.dirname, datafiles.basename, "compound-and-condition")

    # Test with the opt option set
    result = cli.run(
        project=project,
        silent=True,
        args=[
            "--option",
            "debug",
            debug,
            "--option",
            "logging",
            logging,
            "show",
            "--deps",
            "none",
            "--format",
            "%{vars}",
            "element.bst",
        ],
    )
    result.assert_success()
    loaded = _yaml.load_data(result.output)
    assert loaded.get_str("debug") == expected


@pytest.mark.datafiles(DATA_DIR)
@pytest.mark.parametrize(
    "debug,logging,expected",
    [("False", "False", "False"), ("True", "False", "True"), ("False", "True", "True"), ("True", "True", "True"),],
)
def test_compound_or_conditional(cli, datafiles, debug, logging, expected):
    project = os.path.join(datafiles.dirname, datafiles.basename, "compound-or-condition")

    # Test with the opt option set
    result = cli.run(
        project=project,
        silent=True,
        args=[
            "--option",
            "debug",
            debug,
            "--option",
            "logging",
            logging,
            "show",
            "--deps",
            "none",
            "--format",
            "%{vars}",
            "element.bst",
        ],
    )
    result.assert_success()
    loaded = _yaml.load_data(result.output)
    assert loaded.get_str("logging") == expected


@pytest.mark.datafiles(DATA_DIR)
@pytest.mark.parametrize("option,expected", [("False", "horsy"), ("True", "pony"),])
def test_deep_nesting_level1(cli, datafiles, option, expected):
    project = os.path.join(datafiles.dirname, datafiles.basename, "deep-nesting")
    result = cli.run(
        project=project,
        silent=True,
        args=["--option", "pony", option, "show", "--deps", "none", "--format", "%{public}", "element.bst"],
    )
    result.assert_success()
    loaded = _yaml.load_data(result.output)
    shallow_list = loaded.get_sequence("shallow-nest")
    first_dict = shallow_list.mapping_at(0)

    assert first_dict.get_str("animal") == expected


@pytest.mark.datafiles(DATA_DIR)
@pytest.mark.parametrize("option,expected", [("False", "horsy"), ("True", "pony"),])
def test_deep_nesting_level2(cli, datafiles, option, expected):
    project = os.path.join(datafiles.dirname, datafiles.basename, "deep-nesting")
    result = cli.run(
        project=project,
        silent=True,
        args=["--option", "pony", option, "show", "--deps", "none", "--format", "%{public}", "element-deeper.bst"],
    )
    result.assert_success()
    loaded = _yaml.load_data(result.output)
    shallow_list = loaded.get_sequence("deep-nest")
    deeper_list = shallow_list.sequence_at(0)
    first_dict = deeper_list.mapping_at(0)

    assert first_dict.get_str("animal") == expected
