tfpl 0.2.0

FPL, in the terminal
use color_eyre::eyre::Result;
use ratatui::{prelude::*, widgets::*};
use serde::{Deserialize, Serialize};
use serde_json::error::Category;
use thousands::Separable;
use tokio::sync::mpsc::UnboundedSender;

use super::{Component, Frame};
use crate::{
    action::Action,
    config::{Config, KeyBindings},
};

pub struct ManagerSummary {
    details: fpl_api::manager::Manager,
}

impl ManagerSummary {
    pub fn new(details: fpl_api::manager::Manager) -> Self {
        Self { details }
    }

    fn get_player_flag_emoji(&self) -> &str {
        emojis::get_by_shortcode(&self.details.player_region_name.clone().to_ascii_lowercase())
            .map_or("?", |x| x.as_str())
    }

    pub fn draw(&mut self, f: &mut Frame<'_>, area: Rect) -> Result<()> {
        let p = Paragraph::new(vec![
            Line::styled(self.details.name.clone(), Style::default().bg(Color::Indexed(127_u8)).fg(Color::White)),
            Line::from(format!(
                "({} {}, {})",
                &self.details.player_first_name,
                &self.details.player_last_name,
                self.get_player_flag_emoji()
            )),
            Line::from("-------------------------"),
            Line::from(format!("Overall Rank: {}", self.details.summary_overall_rank.separate_with_commas())),
            Line::from(format!("Overall Points: {}", self.details.summary_overall_points)),
            Line::from("-------------------------"),
            Line::from(format!("GW Rank: {}", self.details.summary_event_rank.get_or_insert(0).separate_with_commas())),
            Line::styled(
                format!("GW Points: {}", self.details.summary_event_points),
                Style::default().bg(Color::Indexed(125_u8)),
            ),
        ])
        .block(Block::default().borders(Borders::ALL).padding(Padding::new(0, 0, 5, 5)))
        .alignment(Alignment::Center);
        f.render_widget(p, area);
        Ok(())
    }
}