import autode as ade
from autode.bracket.ieip import IEIP
from autode.transition_states import TSguess, TransitionState
from datetime import datetime

start_time = datetime.now()

ade.log.logger.setLevel('INFO')
ade.Config.n_cores = 8
ade.Config.max_core = 3000
ade.Config.hcode = "ORCA"
ade.Config.ORCA.keywords.grad = ["PBE0", "D3BJ", "def2-SVP", "def2/J", "TightSCF", "defgrid3", "RIJCOSX", "EnGrad"]
ade.Config.ORCA.keywords.low_sp = ["PBE0", "D3BJ", "def2-SVP", "def2/J", "TightSCF", "defgrid3", "RIJCOSX", "SP"]
ade.Config.ORCA.keywords.opt_ts = ["OptTS", "PBE0", "D3BJ", "def2-SVP", "def2/J", "TightSCF", "defgrid3", "RIJCOSX", "tightOpt",
                                   "\n%geom\n calc_hess true\n Trust -0.1\n MaxIter 300\nend\n"]
# The keywords are modified to include tighter SCF and larger grid

rct = ade.Reactant('ieip_Pd_benzene_CH_irc_IRC_F.xyz', charge=0, mult=1)
prod = ade.Product('Pd_benzene_CH-PROD_opt_pbe0.xyz', charge=0, mult=1)

ieip = IEIP(
   initial_species = rct,
   final_species = prod,
   maxiter = 1000,
   use_ll_neb_interp = False,
   gtol=0.01,
)

ieip.calculate(ade.methods.ORCA(), n_cores=8)
total_iters = ieip._macro_iter * 2 + 4
with open("ieip_grad_counter.txt", "w") as fh:
    fh.write(str(total_iters))

runtime = datetime.now() - start_time
with open("ieip_time.txt", "w") as fh2:
    fh2.write(str(runtime.total_seconds()))

if ieip.ts_guess is not None:
    tsg = TSguess.from_species(ieip.ts_guess.new_species(name="Pd_benzene_CH_ieip_run_3"))
    ts = TransitionState(tsg)
    ts.optimise()
