import os
import locale
import sys

from io import StringIO
from pathlib import Path

from parameterized import parameterized
import pytest

from tests.integration.local.invoke.layer_utils import LayerUtils
from .invoke_integ_base import InvokeIntegBase
from tests.testing_utils import IS_WINDOWS, RUNNING_ON_CI, RUNNING_TEST_FOR_MASTER_ON_CI, RUN_BY_CANARY

from samcli.commands.local.invoke.cli import cli
from samcli.cli.context import Context

from click.testing import CliRunner


class TestSamPython36HelloWorldNonUTF8Integration(InvokeIntegBase):
    template = Path("template.yml")

    @classmethod
    def setUpClass(cls):
        super().setUpClass()

        def mock_getpreferredencoding(do_setlocale=True):
            return "cp932"

        cls._original_getpreferredencoding = locale.getpreferredencoding
        locale.getpreferredencoding = mock_getpreferredencoding

    @classmethod
    def tearDownClass(cls):
        locale.getpreferredencoding = cls._original_getpreferredencoding

    @pytest.fixture(autouse=True)
    def inject_fixtures(self, caplog):
        self._caplog = caplog

    @parameterized.expand(
        [
            ("MyReallyCoolFunction",),
            ("HelloWorldServerlessFunction",),
            ("HelloWorldServerlessWithFunctionNameRefFunction",),
        ]
    )
    def test_invoke_returns_execpted_results(self, function_name):
        runner = CliRunner(mix_stderr=False)
        self._caplog.set_level(100000)  # https://github.com/pallets/click/issues/824
        result = runner.invoke(cli, [function_name, "-t", self.template_path, "-e", self.event_path])
        cli_stdout_lines = result.stdout.strip().split("\n")
        self.assertIn('"Hello world"', cli_stdout_lines)