---
title: "MFL: Basics"
output: rmarkdown::html_vignette
author: Tan Ho
date: "`r Sys.Date()`"
vignette: >
  %\VignetteIndexEntry{MFL: Basics}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

options(dplyr.summarise.inform = FALSE,
        rmarkdown.html_vignette.check_title = FALSE)

eval <- TRUE

tryCatch(expr = {
  
  download.file("https://github.com/ffverse/ffscrapr-tests/archive/1.4.7.zip","f.zip")
  unzip('f.zip', exdir = ".")
  
  httptest::.mockPaths(new = "ffscrapr-tests-1.4.7")},
  warning = function(e) eval <<- FALSE,
  error = function(e) eval <<- FALSE)

httptest::use_mock_api()
```

In this vignette, I'll walk through how to get started with a basic dynasty value analysis on MFL. 

We'll start by loading the packages:

```{r setup, eval = eval}
  library(ffscrapr)
  library(dplyr)
  library(tidyr)
```

Set up the connection to the league:

```{r eval = eval}
ssb <- mfl_connect(season = 2020, 
                   league_id = 54040, # from the URL of your league
                   rate_limit_number = 3, 
                   rate_limit_seconds = 6)
ssb
```

I've done this with the `mfl_connect()` function, although you can also do this from the `ff_connect()` call - they are equivalent. 
Most if not all of the remaining functions are prefixed with "ff_".

Cool! Let's have a quick look at what this league is like.

```{r eval = eval}
ssb_summary <- ff_league(ssb)

str(ssb_summary)
```

Okay, so it's the Smash Bros Dynasty League, it's a 1QB league with 14 teams, best ball scoring, half ppr and point-per-first-down settings. 

Let's grab the rosters now. 

```{r eval = eval}
ssb_rosters <- ff_rosters(ssb)

head(ssb_rosters)
```

## Values

Cool! Let's pull in some additional context by adding DynastyProcess player values. 

```{r eval = eval}
player_values <- dp_values("values-players.csv")

# The values are stored by fantasypros ID since that's where the data comes from. 
# To join it to our rosters, we'll need playerID mappings.

player_ids <- dp_playerids() %>% 
  select(mfl_id,fantasypros_id)

player_values <- player_values %>% 
  left_join(player_ids, by = c("fp_id" = "fantasypros_id")) %>% 
  select(mfl_id,ecr_1qb,ecr_pos,value_1qb)

# Drilling down to just 1QB values and IDs, we'll be joining it onto rosters and don't need the extra stuff

ssb_values <- ssb_rosters %>% 
  left_join(player_values, by = c("player_id"="mfl_id")) %>% 
  arrange(franchise_id,desc(value_1qb))

head(ssb_values)
```

Let's do some team summaries now!

```{r eval = eval}
value_summary <- ssb_values %>% 
  group_by(franchise_id,franchise_name,pos) %>% 
  summarise(total_value = sum(value_1qb,na.rm = TRUE)) %>%
  ungroup() %>% 
  group_by(franchise_id,franchise_name) %>% 
  mutate(team_value = sum(total_value)) %>% 
  ungroup() %>% 
  pivot_wider(names_from = pos, values_from = total_value) %>% 
  arrange(desc(team_value))

value_summary
```

So with that, we've got a team summary of values! I like applying some context, so let's turn these into percentages.

```{r eval = eval}
value_summary_pct <- value_summary %>% 
  mutate_at(c("team_value","QB","RB","WR","TE"),~.x/sum(.x)) %>% 
  mutate_at(c("team_value","QB","RB","WR","TE"),round, 3)

value_summary_pct
```

Armed with a value summary like this, we can see team strengths and weaknesses pretty quickly, and figure out who might be interested in your positional surpluses and who might have a surplus at a position you want to look at.


## Age
Another question you might ask: what is the average age of any given team?

I like looking at average age by position, but weighted by dynasty value. 
This helps give a better idea of age for each team!

```{r eval = eval}
age_summary <- ssb_values %>% 
  group_by(franchise_id,pos) %>% 
  mutate(position_value = sum(value_1qb,na.rm=TRUE)) %>% 
  ungroup() %>% 
  mutate(weighted_age = age*value_1qb/position_value) %>% 
  group_by(franchise_id,franchise_name,pos) %>% 
  summarise(count = n(),
            age = sum(weighted_age,na.rm = TRUE)) %>% 
  pivot_wider(names_from = pos,
              values_from = c(age,count))

age_summary
```

## Next steps

In this vignette, I've used three functions: ff_connect, ff_league, and ff_rosters. 
Now that you've gotten this far, why not check out some of the other possibilities?

```{r include = FALSE}
httptest::stop_mocking()

unlink(c("ffscrapr-tests-1.4.7","f.zip"), recursive = TRUE, force = TRUE)
```

