"""
Reads biomass transport costs for different countries of the JRC report

    "The JRC-EU-TIMES model.
    Bioenergy potentials
    for EU and neighbouring countries."
    (2015)

converts them from units 'EUR per km/ton' -> 'EUR/ (km MWh)'

assuming as an approximation energy content of wood pellets

@author: bw0928
"""

import pandas as pd
import tabula as tbl

ENERGY_CONTENT = 4.8  # unit MWh/t (wood pellets)

def get_countries():

    pandas_options = dict(
        skiprows=range(6),
        header=None,
        index_col=0
    )

    return tbl.read_pdf(
        str(snakemake.input.transport_cost_data),
        pages="145",
        multiple_tables=False,
        pandas_options=pandas_options
    )[0].index


def get_cost_per_tkm(page, countries):
    
    pandas_options = dict(
        skiprows=range(6),
        header=0,
        sep=' |,',
        engine='python',
        index_col=False,
    )

    sc = tbl.read_pdf(
        str(snakemake.input.transport_cost_data),
        pages=page,
        multiple_tables=False,
        pandas_options=pandas_options
    )[0]
    sc.index = countries
    sc.columns = sc.columns.str.replace("€", "EUR")
    
    return sc


def build_biomass_transport_costs():

    countries = get_countries()

    sc1 = get_cost_per_tkm(146, countries)
    sc2 = get_cost_per_tkm(147, countries)

    # take mean of both supply chains
    to_concat = [sc1["EUR/km/ton"], sc2["EUR/km/ton"]]
    transport_costs = pd.concat(to_concat, axis=1).mean(axis=1)

    # convert tonnes to MWh
    transport_costs /= ENERGY_CONTENT
    transport_costs.name = "EUR/km/MWh"

    # rename country names
    to_rename = {
        "UK": "GB",
        "XK": "KO",
        "EL": "GR"
    }
    transport_costs.rename(to_rename, inplace=True)

    # add missing Norway with data from Sweden
    transport_costs["NO"] = transport_costs["SE"]

    transport_costs.to_csv(snakemake.output[0])


if __name__ == "__main__":

    build_biomass_transport_costs()