---
title: "AFLCA Coaches Votes Functions"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{AFLCA Coaches Votes Functions}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r setup, include = FALSE}
not_cran <- identical(Sys.getenv("NOT_CRAN"), "true")
online <- !is.null(curl::nslookup("r-project.org", error = FALSE))
eval_param <- not_cran & online

knitr::opts_chunk$set(
  eval = eval_param,
  message = FALSE,
  warning = FALSE,
  collapse = TRUE,
  comment = "#>"
)

library(fitzRoy)
library(dplyr)
```

Functions have been added to fitzRoy to scrape and analyse AFLCA coaches votes.

* `fetch_coaches_votes` - returns all AFLCA coaches votes for given season/s, round/s, and/or team's matches.
* `calculate_coaches_vote_possibilities` - returns all possible breakdowns of coaches votes between two coaches, given a data frame like the one returned by `fetch_coaches_votes`.

# Scraping Coaches Votes
The `fetch_coaches_votes` function accepts 4 arguments. The `season`, `round_number` and `comp` arguments are common to the core `fetch_*` functions as per the [Main Fetch Functions Vignette](https://jimmyday12.github.io/fitzRoy/articles/main-fetch-functions.html).

* `season` - the season or seasons to return data from. If NULL (the default), will return the season that matches `Sys.Date()`
* `round_number`- the round to return data from. If NULL (the default), will return data from all rounds
* `comp` - the competition to return data from. Must be one of "AFLM" (default) or "AFLW". Not all data sources will have AFLW data.
* `team` - the team/s whose matches to include. If NULL (the default), will return data from all teams.

## Examples

The following are some examples of ways to scrape the AFLCA coaches votes. Firstly, coaches votes can be retrieved for a season (or an array of seasons).

```{r fetch_coaches_votes_aflm, eval=FALSE, include=TRUE}
fetch_coaches_votes(season = 2021, comp = "AFLM") %>% head()
```
```{r fetch_coaches_votes_aflm_included, echo=FALSE, eval=eval_param}
fitzRoy:::aflm_coaches_votes %>% head()
```

We can also return votes for AFLW. 

```{r fetch_coaches_votes_aflw, eval=FALSE, include=TRUE}
fetch_coaches_votes(season = 2021, comp = "AFLW") %>% head()
```
```{r fetch_coaches_votes_aflw_included, echo=FALSE, eval=eval_param}
fitzRoy:::aflw_coaches_votes %>% head()
```

We can return just one round instead of the whole fixture.

```{r fetch_coaches_votes2_aflm, eval=FALSE, include=TRUE}
fetch_coaches_votes(season = 2021, round_number = 24, comp = "AFLM")
```
```{r fetch_coaches_votes2_aflm_included, echo=FALSE, eval=eval_param}
fitzRoy:::aflm_coaches_votes %>%
  dplyr::filter(Round == 24) %>%
  head()
```

```{r fetch_coaches_votes2_aflw, eval=FALSE, include=TRUE}
fetch_coaches_votes(season = 2021, round_number = 9, comp = "AFLW")
```
```{r fetch_coaches_votes2_aflw_included, echo=FALSE, eval=eval_param}
fitzRoy:::aflw_coaches_votes %>%
  dplyr::filter(Round == 9) %>%
  head()
```

We could also return coaches votes for matches including a particular team. 

```{r fetch_coaches_votes3_aflm, eval=FALSE, include=TRUE}
fetch_coaches_votes(season = 2021, comp = "AFLM", team = "Western Bulldogs")
```
```{r fetch_coaches_votes3_aflm_included, echo=FALSE, eval=eval_param}
fitzRoy:::aflm_coaches_votes %>%
  dplyr::filter(Home.Team == "Western Bulldogs" | Away.Team == "Western Bulldogs") %>%
  head()
```

```{r fetch_coaches_votes3_aflw, eval=FALSE, include=TRUE}
fetch_coaches_votes(season = 2021, comp = "AFLW", team = "Western Bulldogs")
```
```{r fetch_coaches_votes3_aflw_included, echo=FALSE, eval=eval_param}
fitzRoy:::aflw_coaches_votes %>%
  dplyr::filter(Home.Team == "Western Bulldogs" | Away.Team == "Western Bulldogs") %>%
  head()
```

Combining these, we can return coaches votes for a single match.

```{r fetch_coaches_votes4_aflm, eval=FALSE, include=TRUE}
fetch_coaches_votes(season = 2021, round_number = 24, comp = "AFLM", team = "Western Bulldogs")
```
```{r fetch_coaches_votes4_aflm_included, echo=FALSE, eval=eval_param}
fitzRoy:::aflm_coaches_votes %>%
  dplyr::filter(Home.Team == "Western Bulldogs" & Round == 24) %>%
  head()
```

```{r fetch_coaches_votes4_aflw, eval=FALSE, include=TRUE}
fetch_coaches_votes(season = 2021, round_number = 9, comp = "AFLW", team = "Western Bulldogs")
```
```{r fetch_coaches_votes4_aflw_included, echo=FALSE, eval=eval_param}
fitzRoy:::aflw_coaches_votes %>%
  dplyr::filter(Home.Team == "Western Bulldogs" & Round == 9) %>%
  head()
```

# Calculating Coaches Vote Possibilities
The `calculate_coaches_vote_possibilities` function accepts two arguments.

* `df` - a data frame which requires column names `Player.Name`, `Coaches.Votes`. This can be returned from the `fetch_coaches_votes` function. The votes can only be from a single match.
* `output_type` - the way to present the results. `"Coach View"` Will provide a list of data frames with possible votes by coach. `"Player View"` will provide a list of data frames with possible votes by player. See the examples section for how these data frames look.

## Examples

The following code will return the coaches votes for a particular match, then find the possible coaches vote breakdowns.

```{r calculate_coaches_votes, eval=FALSE, include=TRUE}
df <- fetch_coaches_votes(season = 2021, round_number = 24, comp = "AFLM", team = "Western Bulldogs")
calculate_coaches_vote_possibilities(df, "Coach View")
```
```{r calculate_coaches_votes_included, echo=FALSE, eval=eval_param}
fitzRoy:::aflm_coaches_votes %>%
  dplyr::filter(Round == 24 & Home.Team == "Western Bulldogs") %>%
  fitzRoy:::calculate_coaches_vote_possibilities("Coach View")
```

The following code will create a data frame manually, then find the possible coaches vote breakdowns.

```{r calculate_coaches_votes2, eval=eval_param, include=TRUE}
df <- data.frame(
  Player.Name = c("Tom Liberatore", "Jack Macrae", "Marcus Bontempelli", "Cody Weightman", "Darcy Parish", "Aaron Naughton", "Jordan Ridley"),
  Coaches.Votes = c(7, 6, 5, 5, 4, 2, 1)
)
calculate_coaches_vote_possibilities(df, "Player View")
```
