from __future__ import annotations

import pytest

from prompt_toolkit.styles import AdjustBrightnessStyleTransformation, Attrs


@pytest.fixture
def default_attrs():
    return Attrs(
        color="",
        bgcolor="",
        bold=False,
        underline=False,
        strike=False,
        italic=False,
        blink=False,
        reverse=False,
        hidden=False,
    )


def test_adjust_brightness_style_transformation(default_attrs):
    tr = AdjustBrightnessStyleTransformation(0.5, 1.0)

    attrs = tr.transform_attrs(default_attrs._replace(color="ff0000"))
    assert attrs.color == "ff7f7f"

    attrs = tr.transform_attrs(default_attrs._replace(color="00ffaa"))
    assert attrs.color == "7fffd4"

    # When a background color is given, nothing should change.
    attrs = tr.transform_attrs(default_attrs._replace(color="00ffaa", bgcolor="white"))
    assert attrs.color == "00ffaa"

    # Test ansi colors.
    attrs = tr.transform_attrs(default_attrs._replace(color="ansiblue"))
    assert attrs.color == "6666ff"

    # Test 'ansidefault'. This shouldn't change.
    attrs = tr.transform_attrs(default_attrs._replace(color="ansidefault"))
    assert attrs.color == "ansidefault"

    # When 0 and 1 are given, don't do any style transformation.
    tr2 = AdjustBrightnessStyleTransformation(0, 1)

    attrs = tr2.transform_attrs(default_attrs._replace(color="ansiblue"))
    assert attrs.color == "ansiblue"

    attrs = tr2.transform_attrs(default_attrs._replace(color="00ffaa"))
    assert attrs.color == "00ffaa"
