from pathlib import Path
from typing import Union

import rio


class NewsPost(rio.Component):
    def __init__(self, header: str, article_text: Union[str, Path], date: str):
        super().__init__()
        self.align_y = 0
        self.margin_top = 0
        self.margin_bottom = 2
        self.margin_right = 1
        self._header = header
        self._date = date
        if isinstance(article_text, str):
            self._article_text = article_text
        elif isinstance(article_text, Path):
            with open(article_text, "r", encoding="utf-8") as f:
                self._article_text = f.read()

    def build(self) -> rio.Component:
        return rio.Rectangle(
            content=rio.Column(
                rio.Row(
                    rio.Text(self._header, align_x=0.1, style="heading2"),
                    rio.Text(self._date, align_x=0.9, style=rio.TextStyle(italic=True)),
                    margin_top=0.5
                ),
                rio.Column(
                    rio.Markdown(self._article_text, margin=1)
                )
            ),
            fill=self.session.theme.neutral_color,
            corner_radius=self.session.theme.corner_radius_medium,
            shadow_radius=0.5,
            shadow_color=self.session.theme.hud_color,
            shadow_offset_y=0
        )
