function interpolate_SST() {
  local DYNAMICS_GRID_FILE="$1"
  local SST_INPUT="$2"
  local SST_OUTPUT="$3"

  remap_namelist="tmp_sst_remap.nmp"
  cat >${remap_namelist} <<END

  &remap_nml
  in_filename = "${SST_INPUT}"
  in_type = 1
  out_grid_filename = "${DYNAMICS_GRID_FILE}"
  out_filename = "${SST_OUTPUT}"
  out_type = 2
  out_filetype = 4
  /

  &input_field_nml
  inputname = "T_SEA"
  outputname = "T_SEA"
  code=167
  /

END

  ulimit -s unlimited
  OMP_NUM_THREADS=1 iconremap --remap_nml ${remap_namelist} -vvv

  # Remove namelist
  rm -f ${remap_namelist}

}

#!/bin/bash

# Define the function
function grid_filename_from_extpar() {
  # Assuming the filename is given as the first argument to the function
  filename="$1"

  # This extracts the grid identifier from the filename
  grid_id="${filename:12:13}"

  # This constructs the new filename
  grid_filename="icon_grid_${grid_id}.nc"

  # This prints out the new filename
  echo "${grid_filename}"
}

function interpolate_extpar() {

  local DYNAMICS_GRID_FILE="$1"
  local EXTERNAL_PARAMETERS_FILE="$2"

  echo "Converting extpar file to ICON grid"

  EXTERNAL_PARAMETERS_GRID_FILE=$(grid_filename_from_extpar ${EXTERNAL_PARAMETERS_FILE})

  if [ "${DYNAMICS_GRID_FILE}" != "${EXTERNAL_PARAMETERS_GRID_FILE}" ]; then
    cat >remap.nml <<END
&remap_nml
in_filename = "${EXTERNAL_PARAMETERS_FILE}"
in_grid_filename = "${EXTERNAL_PARAMETERS_GRID_FILE}"
in_type = 2
out_grid_filename = "${DYNAMICS_GRID_FILE}"
out_filename = "tmp_extpar.nc"
out_type = 2
out_filetype = 4
/
END

    cat <<END >extend_remap_namelist.py
import xarray as xr

with xr.open_dataset("${EXTERNAL_PARAMETERS_FILE}") as ds, open('remap.nml', 'a') as file:
   for ida, da in enumerate(ds):
       if da in ["clat","clon","lat","lon"]:
           continue
       file.write('&input_field_nml\n')
       file.write(f'inputname = "{da}"\n')
       file.write(f'outputname = "{da}"\n')
       file.write('/\n\n')
END

    python3 extend_remap_namelist.py

    ulimit -s unlimited
    OMP_NUM_THREADS=1 iconremap --remap_nml remap.nml #-vvv
    rm remap.nml

    # Somehow, when we interpolate we lose some attributes.
    # Here we solve this issue adding the attributes.
    cat <<END >add_attributes.py
# Add sst field to analysis file.
from enstools.io import read

# Open files
with read("tmp_extpar.nc") as ds, read("${EXTERNAL_PARAMETERS_FILE}") as original_extpar_ds:
    if "rawdata" in original_extpar_ds.attrs:
        ds.attrs["rawdata"] = original_extpar_ds.attrs["rawdata"]
        ds.to_netcdf("extpar.nc")
END
    python3 add_attributes.py

    rm "tmp_extpar.nc"

  else
    ln -sf "${EXTERNAL_PARAMETERS_FILE}" "extpar.nc"
  fi
}

function interpolate_analysis() {

  local INPUT_GRID="$1"
  local ANALYSIS_FILE="$2"
  local OUTPUT_GRID="$3"

  echo "Converting analysis to netcdf"

  cat >remap.nml <<END
&remap_nml
in_filename = "${ANALYSIS_FILE}"
in_grid_filename = "${INPUT_GRID}"
in_type = 2
out_grid_filename = "${OUTPUT_GRID}"
out_filename = "interpolated_analysis.nc"
out_type = 2
out_filetype = 4
/
END

  cat <<END >extend_remap_namelist.py
from enstools.io import read

with read("${ANALYSIS_FILE}") as ds, open('remap.nml', 'a') as file:
    all_vars = list(ds.data_vars)
    remap_vars = []
    for var in all_vars:
        if not "bnds" in var and not '_vertices' in var and not 'lat' in var and not 'lon' in var:
            remap_vars.append(var)

    for var in remap_vars:
        file.write('&input_field_nml\n')
        file.write(f'inputname = "{var}"\n')
        file.write(f'outputname = "{var}"\n')
        file.write('/\n\n')
END

  python3 extend_remap_namelist.py

  ulimit -s unlimited
  OMP_NUM_THREADS=1 iconremap --remap_nml remap.nml #-vvv
  rm remap.nml
}

function integrate_sst_to_analysis() {
  local INTERPOLATED_SST="$1"
  local ANALYSIS_FILE="interpolated_analysis.nc"

  cat <<END >integrate_sst_to_analysis.py
# Add sst field to analysis file.
from enstools.io import read
import os
import numpy as np

os.environ['ECCODES_GRIB_NO_INDEX'] = '1'
# Open files
with read("${ANALYSIS_FILE}") as ds, read("${INTERPOLATED_SST}") as sst_ds:
  date=ds.time.values
  day_of_year = int((date - date.astype('datetime64[Y]')) / np.timedelta64(1, 'D'))
   Replace analysis T_SEA with info from the sst_clim file.
  ds["T_SEA"]= sst_ds["T_SEA"].isel(time=day_of_year+1)
  ds.to_netcdf("analysis.nc")
END

  python integrate_sst_to_analysis.py

}

function integrate_sst_to_extpar() {
  local INTERPOLATED_SST="$1"
  local EXTERNAL_PARAMETERS_FILE="$2"

  cat <<END >integrate_sst_to_extpar.py
# Add sst field to analysis file.
from enstools.io import read
import os
import numpy as np
from datetime import datetime, timedelta
import xarray as xr

os.environ['ECCODES_GRIB_NO_INDEX'] = '1'
# Open files
with read("${EXTERNAL_PARAMETERS_FILE}") as ds, read("${INTERPOLATED_SST}") as sst_ds:
  da = sst_ds["T_SEA"]
  year = 2000 # or any other year
  dates = [(datetime(year, 1, 1) + timedelta(days=idx)).month for idx, _ in enumerate(da['time'].values)]

  da['time'] = dates

  # Replace analysis T_SEA with monthly mean from the sst_ds.
  monthly_means = [da.sel(time=month).mean(dim="time") for month in range(1,13)]
  concat_da = xr.concat(monthly_means, dim='time')
  concat_da['time'] = np.arange(1, 13) # replace 'time' with month numbers
  concat_da = concat_da.drop(['clon', 'clat'])

  # Replace analysis T_SEA with monthly mean from the sst_ds.
  ds["T_SEA"] = concat_da

  ds.to_netcdf("extpar.nc")

END

  python integrate_sst_to_extpar.py

}