#!/usr/bin/env python3

# This script can be removed when GitHub issue #141 (https://github.com/google/skywater-pdk/issues/141) is fixed.
from os import path
import argparse
import subprocess

parser = argparse.ArgumentParser(
    description='This file fixes the missing diode information from the LEF files of the ms and hs')

parser.add_argument('--skywater_path', '-sp',required=True,
                    help='skywater path')


args = parser.parse_args()
skywater_path = args.skywater_path


hs_lef =  str(skywater_path)+"/sky130_fd_sc_hs/latest/cells/diode/sky130_fd_sc_hs__diode_2.magic.lef"

if(path.exists(hs_lef)):
    hs_lef_FileOpener = open(hs_lef, "r")
    if hs_lef_FileOpener.mode == 'r':
        hs_lef_Content = hs_lef_FileOpener.read()
    hs_lef_FileOpener.close()
    hs_lef_Content = hs_lef_Content.replace("CLASS BLOCK","CLASS CORE ANTENNACELL")
    if hs_lef_Content.find("PIN DIODE\n    DIRECTION INPUT ;") == -1:
        hs_lef_Content = hs_lef_Content.replace("PIN DIODE","SYMMETRY X Y ;\n  SITE unit ;\n  PIN DIODE\n    DIRECTION INPUT ;\n    USE SIGNAL ;")
    hs_lef_FileOpener = open(hs_lef,"w")
    hs_lef_FileOpener.write(hs_lef_Content)
    hs_lef_FileOpener.close()


ms_lef =  str(skywater_path)+"/sky130_fd_sc_ms/latest/cells/diode/sky130_fd_sc_ms__diode_2.magic.lef"

if(path.exists(ms_lef)):
    ms_lef_FileOpener = open(ms_lef, "r")
    if ms_lef_FileOpener.mode == 'r':
        ms_lef_Content = ms_lef_FileOpener.read()
    ms_lef_FileOpener.close()
    ms_lef_Content = ms_lef_Content.replace("CLASS BLOCK","CLASS CORE ANTENNACELL")
    if ms_lef_Content.find("PIN DIODE\n    DIRECTION INPUT ;") == -1:
        ms_lef_Content = ms_lef_Content.replace("PIN DIODE","SYMMETRY X Y ;\n  SITE unit ;\n  PIN DIODE\n    DIRECTION INPUT ;\n    USE SIGNAL ;")
    ms_lef_FileOpener = open(ms_lef,"w")
    ms_lef_FileOpener.write(ms_lef_Content)
    ms_lef_FileOpener.close()
