import os
import json
import math
import numpy as np
import requests
import csv
from pathlib import Path
import json
import pandas as pd
import PySAM.Pvwattsv7 as PVWatts
import PySAM.Grid as Grid
import PySAM.Utilityrate5 as UtilityRate
import PySAM.Cashloan as Cashloan
import PySAM.Pvsamv1 as pvsam1
import PySAM.Merchantplant as merchant
import PySAM.Singleowner as singleowner

pv = pvsam1.new()
grid = Grid.from_existing(pv)
ur = UtilityRate.from_existing(pv)
cl = singleowner.from_existing(pv)


#The json files exported from the SAM GUI are then collected in order

dir = os.getcwd().replace('\\', '/') + '/otros/'
name = 'proyecto'
file_names = [f"{name}_pvsamv1", f"{name}_grid", f"{name}_utilityrate5", f"{name}_singleowner"]
modules = [pv, grid, ur, cl]

#Then read the data from the json into the models.

for f, m in zip(file_names, modules):
    with open(dir + f + ".json", 'r') as file:
        if f == f"{name}_pvsamv1":
            data = json.load(file)
            data_escalation = data['ppa_escalation']
            data.pop('ppa_escalation')

        elif f == f"{name}_singleowner":
            data = json.load(file)
            data['ppa_escalation'] = data_escalation
        else:
            data = json.load(file)
        for k, v in data.items():
            if k != "number_inputs":
                m.value(k, v)


#Here we continue our example.

for m in modules:
    m.execute()

#We can then print out some of the data. The variable and group names are found in the Modules.

print('ac_annual = ', pv.Outputs.annual_energy)
print('ur_ec_tou_mat: ', ur.ElectricityRates.ur_ec_tou_mat)
print('VAN = ', cl.Outputs.project_return_aftertax_npv)
print('Outputs.capacity_factor output = ', pv.Outputs.capacity_factor)
print('Performance Ratio = ', pv.Outputs.performance_ratio)
print('LCOE Nominal = ', cl.Outputs.lcoe_nom)
print('LCOE Real = ', cl.Outputs.lcoe_real)
print('IRR after tax = ', cl.Outputs.project_return_aftertax_irr)
