import pydivkit as dk


def test_container_example():
    container = dk.DivContainer(
        items=[dk.DivGallery(items=[dk.DivText(text="Hello from pydivkit")])]
    )

    assert container.dict() == {
        "type": "container",
        "items": [
            {
                "type": "gallery",
                "items": [{"type": "text", "text": "Hello from pydivkit"}],
            }
        ],
    }


def test_slider_example():
    slider = dk.DivData(
        log_id="sample_card",
        states=[
            dk.DivDataState(
                state_id=0,
                div=dk.DivSlider(
                    width=dk.DivMatchParentSize(),
                    max_value=10,
                    min_value=1,
                    thumb_style=dk.DivShapeDrawable(
                        color="#00b300",
                        stroke=dk.DivStroke(
                            color="#ffffff",
                            width=3,
                        ),
                        shape=dk.DivRoundedRectangleShape(
                            item_width=dk.DivFixedSize(value=32),
                            item_height=dk.DivFixedSize(value=32),
                            corner_radius=dk.DivFixedSize(value=100),
                        ),
                    ),
                    track_active_style=dk.DivShapeDrawable(
                        color="#00b300",
                        shape=dk.DivRoundedRectangleShape(
                            item_height=dk.DivFixedSize(value=6)
                        ),
                    ),
                    track_inactive_style=dk.DivShapeDrawable(
                        color="#20000000",
                        shape=dk.DivRoundedRectangleShape(
                            item_height=dk.DivFixedSize(value=6)
                        ),
                    ),
                ),
            )
        ],
    )

    assert slider.dict() == dict(
        log_id="sample_card",
        states=[
            dict(
                div=dict(
                    type="slider",
                    max_value=10,
                    min_value=1,
                    thumb_style=dict(
                        type="shape_drawable",
                        color="#00b300",
                        shape=dict(
                            type="rounded_rectangle",
                            corner_radius=dict(type="fixed", value=100),
                            item_height=dict(type="fixed", value=32),
                            item_width=dict(type="fixed", value=32),
                        ),
                        stroke=dict(color="#ffffff", width=3),
                    ),
                    track_active_style=dict(
                        type="shape_drawable",
                        color="#00b300",
                        shape=dict(
                            type="rounded_rectangle",
                            item_height=dict(type="fixed", value=6),
                        ),
                    ),
                    track_inactive_style=dict(
                        type="shape_drawable",
                        color="#20000000",
                        shape=dict(
                            type="rounded_rectangle",
                            item_height=dict(type="fixed", value=6),
                        ),
                    ),
                    width=dict(type="match_parent"),
                ),
                state_id=0,
            )
        ],
    )


def test_gallery():
    class CategoriesItem(dk.DivContainer):
        """
        Class inherited from dk.DivContainer will have a template
        """

        # Special object for mark this fields a DivKit field in template
        icon_url: str = dk.Field()
        text: str = dk.Field()

        # Set defaults layout for in the template
        width = dk.DivWrapContentSize()
        background = [dk.DivSolidBackground(color="#f0f0f0")]
        content_alignment_vertical = dk.DivAlignmentVertical.CENTER
        orientation = dk.DivContainerOrientation.HORIZONTAL
        paddings = dk.DivEdgeInsets(left=12, right=12, top=10, bottom=10)
        border = dk.DivBorder(corner_radius=12)
        items = [
            dk.DivImage(
                width=dk.DivFixedSize(value=20),
                height=dk.DivFixedSize(value=20),
                margins=dk.DivEdgeInsets(right=6),
                # Special object Ref it's a reference for Field property
                image_url=dk.Ref(icon_url),
            ),
            dk.DivText(
                width=dk.DivWrapContentSize(),
                max_lines=1,
                # Special object Ref it's a reference for Field property
                text=dk.Ref(text),
            ),
        ]

    base_url = "https://leonardo.edadeal.io/dyn/re/segments/level1/96"

    # So after class definition you might use all the `Field` marked property
    # names as an argument.

    gallery = dk.DivGallery(
        items=[
            CategoriesItem(
                text="Food",
                icon_url=f"{base_url}/food.png",
            ),
            CategoriesItem(
                text="Alcohol",
                icon_url=f"{base_url}/alcohol.png",
            ),
            CategoriesItem(
                text="Household",
                icon_url=f"{base_url}/household.png",
            ),
        ]
    )

    template_name = CategoriesItem.template_name

    assert dk.make_div(gallery) == {
        "templates": {
            template_name: {
                "type": "container",
                "background": [{"type": "solid", "color": "#f0f0f0"}],
                "border": {"corner_radius": 12},
                "content_alignment_vertical": "center",
                "items": [
                    {
                        "type": "image",
                        "height": {"type": "fixed", "value": 20},
                        "$image_url": "icon_url",
                        "margins": {"right": 6},
                        "width": {"type": "fixed", "value": 20},
                    },
                    {
                        "type": "text",
                        "max_lines": 1,
                        "$text": "text",
                        "width": {"type": "wrap_content"},
                    },
                ],
                "orientation": "horizontal",
                "paddings": {"bottom": 10, "left": 12, "right": 12, "top": 10},
                "width": {"type": "wrap_content"},
            }
        },
        "card": {
            "log_id": "card",
            "states": [
                {
                    "div": {
                        "type": "gallery",
                        "items": [
                            {
                                "type": template_name,
                                "icon_url": f"{base_url}/food.png",
                                "text": "Food",
                            },
                            {
                                "type": template_name,
                                "icon_url": f"{base_url}/alcohol.png",
                                "text": "Alcohol",
                            },
                            {
                                "type": template_name,
                                "icon_url": f"{base_url}/household.png",
                                "text": "Household",
                            },
                        ],
                    },
                    "state_id": 0,
                }
            ],
        },
    }
