library(prism)
library(raster)
library(tidyverse)
library(lubridate)
library(geosphere)
library(RColorBrewer)
library(png)
library(grid)

#get_prism_dailys(type="tmax", minDate = "2017-01-01", maxDate = "2018-11-29", keepZip=F)
#get_prism_dailys(type="tmin", minDate = "2017-01-01", maxDate = "2018-11-29", keepZip=F)
#get_prism_dailys(type="tmean", minDate = "2017-01-01", maxDate = "2018-11-29", keepZip=F)
#get_prism_dailys(type="ppt", minDate = "2017-01-01", maxDate = "2018-11-29", keepZip=F)

retailCal <- read.csv("C:/Users/sewing/OneDrive - Do My Own/NOAA/4-4-5-calendar.csv",
                      stringsAsFactors = FALSE) %>% 
  mutate(Actual.Date = date(mdy(Actual.Date)),
         X2018.equiv = date(mdy(X2018.equiv))) %>%
  filter(Retail.Year > 2016,
         Retail.Year < 2019) %>%
  select(Actual.Date, Retail.Week, Retail.Year, Retail.DayofYear) %>%
  spread(Retail.Year, Actual.Date) %>%
  mutate(meanFile2017 = character(1),
         meanFile2018 = character(1),
         meanPath2017 = character(1),
         meanPath2018 = character(1)) %>%
  filter(!is.na(`2017`))

options(prism.path = "C:/Users/sewing/OneDrive - Do My Own/NOAA/PRISM_Files")
prismFileList <- ls_prism_data(absPath = TRUE)

stableMeans <- prismFileList[which(grepl("_tmean_stable_4kmD1_",
                                         prismFileList$files)),] %>%
  mutate(Date = ymd(str_sub(files, start = 26, end = -5)))

lastStableDate <- max(stableMeans$Date)
get_prism_dailys(type="tmean",
                 minDate = lastStableDate,
                 maxDate = Sys.Date(),
                 keepZip=F)
prismFileList <- ls_prism_data(absPath = TRUE)

stableMeans <- prismFileList[which(grepl("_tmean_stable_4kmD1_",
                                         prismFileList$files)),] %>%
  mutate(Date = ymd(str_sub(files, start = 26, end = -5)))

newLastStableDate <- max(stableMeans$Date)

provisionalMeans <- prismFileList[which(grepl("_tmean_provisional_4kmD1_",
                                              prismFileList$files)),] %>%
  mutate(Date = ymd(str_sub(files, start = -12, end = -5))) %>%
  filter(Date > ymd(newLastStableDate))

lastProvisionalDate <- max(provisionalMeans$Date)

earlyMeans <- prismFileList[which(grepl("_tmean_early_4kmD1_",
                                              prismFileList$files)),] %>%
  mutate(Date = ymd(str_sub(files, start = -12, end = -5))) %>%
  filter(Date > ymd(lastProvisionalDate))

lastEarlyDate <- max(earlyMeans$Date)

meansFiles <- stableMeans %>%
  rbind(provisionalMeans) %>%
  rbind(earlyMeans)

prismComps <- retailCal %>%
  mutate(meanFile2017 = meansFiles$files[which(meansFiles$Date == retailCal$`2017`)],
         meanFile2018 = ifelse(`2018` > lastEarlyDate,
                               "Future Date",
                               meansFiles$files[which(meansFiles$Date == retailCal$`2018`)]),
         meanPath2017 = meansFiles$abs_path[which(meansFiles$Date == retailCal$`2017`)],
         meanPath2018 = ifelse(`2018` > lastEarlyDate,
                               "Future Date",
                               meansFiles$abs_path[which(meansFiles$Date == retailCal$`2018`)]))
  
dailyRasters <- prismComps %>%
  mutate(`2017 Rasters` = list(length = 1),
         `2018 Rasters` = list(length = 1))

i <- 1

for(i in 1:dim(dailyRasters)[1]){
  dailyRasters$`2017 Rasters`[i] <- raster(dailyRasters$meanPath2017[i])
  i = i + 1
} 
 
i <- 1 

for(i in 1:table(dailyRasters$`2018`<lastEarlyDate)[2]){
dailyRasters$`2018 Rasters`[i] <- raster(dailyRasters$meanPath2018[i])
i = i + 1
}

#plot(dailyRasters$`2017 Rasters`[[1]])
anomCalc <- function(x, y) {
  return(x - y)
}

avgWeek <- function(a, b, c, d, e, f, g) {
  return((((a+b+c+d+e+f+g)/7)*(9/5))+32)
}
i <- 0
while(i < week(lastEarlyDate)-1){
  i = i+1
  weekOverlay17 <- overlay(dailyRasters$`2017 Rasters`[[(7*(i-1))+1]],
                          dailyRasters$`2017 Rasters`[[(7*(i-1))+2]],
                          dailyRasters$`2017 Rasters`[[(7*(i-1))+3]],
                          dailyRasters$`2017 Rasters`[[(7*(i-1))+4]],
                          dailyRasters$`2017 Rasters`[[(7*(i-1))+5]],
                          dailyRasters$`2017 Rasters`[[(7*(i-1))+6]],
                          dailyRasters$`2017 Rasters`[[(7*(i-1))+7]],
                          fun = avgWeek)
  
  writeRaster(weekOverlay17,
              filename = paste0("./Weekly_Rasters/Week_", i, "_2017_avg_temp"),
              overwrite=TRUE)
  
  weekOverlay18 <- overlay(dailyRasters$`2018 Rasters`[[(7*(i-1))+1]],
                          dailyRasters$`2018 Rasters`[[(7*(i-1))+2]],
                          dailyRasters$`2018 Rasters`[[(7*(i-1))+3]],
                          dailyRasters$`2018 Rasters`[[(7*(i-1))+4]],
                          dailyRasters$`2018 Rasters`[[(7*(i-1))+5]],
                          dailyRasters$`2018 Rasters`[[(7*(i-1))+6]],
                          dailyRasters$`2018 Rasters`[[(7*(i-1))+7]],
                          fun = avgWeek)
  
  writeRaster(weekOverlay18,
              filename = paste0("./Weekly_Rasters/Week_", i, "_2018_avg_temp"),
              overwrite=TRUE)
  
  weekYoYDiff <- overlay(weekOverlay18, weekOverlay17, fun = anomCalc)
  
  writeRaster(weekYoYDiff,
              filename = paste0("./Weekly_Rasters/Week_", i, "_YoY_diff_avg_temp"),
              overwrite=TRUE)

}

YoYFiles <- dir(path = "./Weekly_Rasters/",
                pattern = "YoY_diff_avg_temp.grd",
                include.dirs = TRUE,
                full.names = TRUE)

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 1 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_1_", YoYFiles))]),
  main = "Week 1 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 2 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_2_", YoYFiles))]),
  main = "Week 2 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 3 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_3_", YoYFiles))]),
  main = "Week 3 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 4 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_4_", YoYFiles))]),
  main = "Week 4 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 5 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_5_", YoYFiles))]),
  main = "Week 5 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 6 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_6_", YoYFiles))]),
  main = "Week 6 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 7 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_7_", YoYFiles))]),
  main = "Week 7 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 8 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_8_", YoYFiles))]),
  main = "Week 8 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 9 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_9_", YoYFiles))]),
  main = "Week 9 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 10 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_10_", YoYFiles))]),
  main = "Week 10 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 11 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_11_", YoYFiles))]),
  main = "Week 11 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 12 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_12_", YoYFiles))]),
  main = "Week 12 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 13 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_13_", YoYFiles))]),
  main = "Week 13 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 14 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_14_", YoYFiles))]),
  main = "Week 14 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 15 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_15_", YoYFiles))]),
  main = "Week 15 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 16 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_16_", YoYFiles))]),
  main = "Week 16 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 17 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_17_", YoYFiles))]),
  main = "Week 17 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 18 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_18_", YoYFiles))]),
  main = "Week 18 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 19 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_19_", YoYFiles))]),
  main = "Week 19 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 20 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_20_", YoYFiles))]),
  main = "Week 20 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 21 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_21_", YoYFiles))]),
  main = "Week 21 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 22 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_22_", YoYFiles))]),
  main = "Week 22 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 23 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_23_", YoYFiles))]),
  main = "Week 23 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 24 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_24_", YoYFiles))]),
  main = "Week 24 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 25 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_25_", YoYFiles))]),
  main = "Week 25 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 26 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_26_", YoYFiles))]),
  main = "Week 26 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 27 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_27_", YoYFiles))]),
  main = "Week 27 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 28 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_28_", YoYFiles))]),
  main = "Week 28 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 29 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_29_", YoYFiles))]),
  main = "Week 29 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 30 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_30_", YoYFiles))]),
  main = "Week 30 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 31 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_31_", YoYFiles))]),
  main = "Week 31 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 32 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_32_", YoYFiles))]),
  main = "Week 32 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 33 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_33_", YoYFiles))]),
  main = "Week 33 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 34 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_34_", YoYFiles))]),
  main = "Week 34 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 35 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_35_", YoYFiles))]),
  main = "Week 35 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 36 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_36_", YoYFiles))]),
  main = "Week 36 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 37 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_37_", YoYFiles))]),
  main = "Week 37 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 38 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_38_", YoYFiles))]),
  main = "Week 38 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 39 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_39_", YoYFiles))]),
  main = "Week 39 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 40 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_40_", YoYFiles))]),
  main = "Week 40 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 41 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_41_", YoYFiles))]),
  main = "Week 41 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 42 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_42_", YoYFiles))]),
  main = "Week 42 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 43 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_43_", YoYFiles))]),
  main = "Week 43 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 44 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_44_", YoYFiles))]),
  main = "Week 44 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 45 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_45_", YoYFiles))]),
  main = "Week 45 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 46 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_46_", YoYFiles))]),
  main = "Week 46 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 47 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_47_", YoYFiles))]),
  main = "Week 47 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 48 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_48_", YoYFiles))]),
  main = "Week 48 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()

png('C:/Users/sewing/OneDrive - Do My Own/NOAA/Week 49 2018 less 2017 Plot.png')
plot(
  raster(YoYFiles[which(grepl("Week_49_", YoYFiles))]),
  main = "Week 49 '18 - '17",
  zlim = c(-30, 30),
  col = rev(brewer.pal(11, "RdYlBu"))
)
dev.off()