#

# WholesalePrices_Fuel_Hi.jl

#

using SmallModel


module WholesalePrices_Fuel_Hi


import ...SmallModel: ReadDisk,WriteDisk,Select

import ...SmallModel: HisTime,ITime,MaxTime,Zero,First,Last,Future,Final,Yr

import ...SmallModel: @finite_math,finite_inverse,finite_divide,finite_power,finite_exp,finite_log

import ...SmallModel: DB


const VariableArray{N} = Array{Float32,N} where {N}

const SetArray = Vector{String}


Base.@kwdef struct WholesalePrices_Fuel_Hi_Data

  db::String


  BCNameDB::String = ReadDisk(db,"E2020DB/BCNameDB") # Base Case Name


  Area::SetArray = ReadDisk(db,"E2020DB/AreaKey")

  AreaDS::SetArray = ReadDisk(db,"E2020DB/AreaDS")

  Areas::Vector{Int} = collect(Select(Area))

  ES::SetArray = ReadDisk(db,"E2020DB/ESKey")

  ESDS::SetArray = ReadDisk(db,"E2020DB/ESDS")

  ESs::Vector{Int} = collect(Select(ES))

  Fuel::SetArray = ReadDisk(db,"E2020DB/FuelKey")

  FuelDS::SetArray = ReadDisk(db,"E2020DB/FuelDS")

  Fuels::Vector{Int} = collect(Select(Fuel))

  Nation::SetArray = ReadDisk(db,"E2020DB/NationKey")

  NationDS::SetArray = ReadDisk(db,"E2020DB/NationDS")

  Nations::Vector{Int} = collect(Select(Nation))

  Year::SetArray = ReadDisk(db,"E2020DB/YearKey")

  YearDS::SetArray = ReadDisk(db,"E2020DB/YearDS")

  Years::Vector{Int} = collect(Select(Year))


  ANMap::VariableArray{2} = ReadDisk(db,"E2020DB/ANMap") # [Area,Nation] Map between Area and Nation

  ENPN::VariableArray{3} = ReadDisk(db, "SOutput/ENPN") # [Fuel,Nation,Year] Primary Fuel Price ($/mmBtu)

  xExchangeRateNation::VariableArray{2} = ReadDisk(db,"MInput/xExchangeRateNation") # [Nation,Year] Local Currency/US$ Exchange Rate (Local/US$)

  xENPN::VariableArray{3} = ReadDisk(db,"SInput/xENPN") # [Fuel,Nation,Year] Wholesale Energy Prices (1985 US$/mmBtu)

  xInflationNation::VariableArray{2} = ReadDisk(db,"MInput/xInflationNation") # [Nation,Year] Inflation Index ($/$)


  # Scratch Variables

  AEOPrices::VariableArray{2} = zeros(Float32,length(Fuel),length(Year)) # [Fuel,Year] AEO Wholesale Fuel Prices ($/mmBtu)

end


function PricePolicy(db)

  data = WholesalePrices_Fuel_Hi_Data(; db)

  (;ES,Fuel,Fuels,Nation,Nations,Years) = data

  (;ANMap,ENPN,xExchangeRateNation,xENPN,xInflationNation) = data

  (;AEOPrices) = data

  

  CN = Select(Nation,"CN")

             

  fuel = Select(Fuel,"NaturalGas")

  xENPN[fuel,CN,Yr(2026)] = xENPN[fuel,CN,Yr(2026)]*(1 + 0.0 )


  #

  # Light Crude Oil Price

  #

  fuel = Select(Fuel,"LightCrudeOil")

  xENPN[fuel,CN,Yr(2026)] = xENPN[fuel,CN,Yr(2026)]*(1 + 0.704)


  #

  # Heavy Crude Oil Price

  #

  fuel = Select(Fuel,"HeavyCrudeOil")

  xENPN[fuel,CN,Yr(2026)] = xENPN[fuel,CN,Yr(2026)]*(1 + 0.716)


  fuels = Select(Fuel,["LightCrudeOil","HeavyCrudeOil"])

  for fuel in Fuels

    ENPN[fuel,CN,Yr(2026)] = xENPN[fuel,CN,Yr(2026)]

  end


  WriteDisk(db,"SInput/xENPN",xENPN)

  WriteDisk(db,"SOutput/ENPN",ENPN)


end


function PolicyControl(db)

  @info "WholesalePrices_Fuel_Hi.jl - PolicyControl"


  PricePolicy(db)


end


if abspath(PROGRAM_FILE) == @__FILE__

  PolicyControl(DB)

end


end