# %%
from gwpy.timeseries import TimeSeries, TimeSeriesDict
import numpy as np
import sys
Tp = 0.031
input_power_channel = 'H1:IMC-PWR_IN_OUT_DQ'
report = ''

# %%
t0 = 1432690469 # 2025-05-30 post vent
# t0 = 1427488687 # 2025-03-31 pre vent

grd_state_channel = 'H1:GRD-ISC_LOCK_STATE_N'
isc_grd_state = TimeSeries.fetch(grd_state_channel,start=t0, end=t0+1,
                                 )
isc_grd_state = int(np.average(isc_grd_state).value)
if isc_grd_state == 16:
    report += (f"\n{t0}: FIND_IR state")
else:
    sys.exit(1)

trx_channels = ['H1:ASC-X_TR_A_NSUM_OUT_DQ', 'H1:ASC-X_TR_B_NSUM_OUT_DQ']
trx_series = TimeSeriesDict.fetch(trx_channels,
                                  start=t0, end=t0+1)
trx_powers = [ np.average(trx_series[channel].value) for channel in trx_channels]
trx_power_find_ir = np.average(trx_powers)
report += (f"\n\tTRX Power: {trx_power_find_ir:.1f} W")

input_power = TimeSeries.fetch(input_power_channel,start=t0, end=t0+10,
                                 )
input_power_find_ir = int(np.median(input_power).value)
report += (f"\n\tInput Power: {input_power_find_ir:.3f} W")

# %%
t1 = 1432694134  # 2025-05-30 post vent
# t1 = 1427490018 # 2025-03-31 pre vent

isc_grd_state = TimeSeries.fetch(grd_state_channel,start=t1, end=t1+1,
                                 )
isc_grd_state = int(np.average(isc_grd_state).value)
if isc_grd_state == 501:
    report += (f"\n{t1}: DARM_TO_DC_READOUT state")
else:
    print(f"{t1} is not a DARM_TO_DC_READOUT state time")
    sys.exit(1)

trx_channels = ['H1:ASC-X_TR_A_NSUM_OUT_DQ', 'H1:ASC-X_TR_B_NSUM_OUT_DQ']
trx_series = TimeSeriesDict.fetch(trx_channels,
                                  start=t1, end=t1+1)
trx_powers = [ np.average(trx_series[channel].value) for channel in trx_channels]
trx_power_full_ifo = np.average(trx_powers)
report += (f"\n\tTRX Power: {trx_power_full_ifo:.1f} W")

input_power = TimeSeries.fetch(input_power_channel,start=t1, end=t1+10,
                                 )
input_power_full_ifo = int(np.median(input_power).value)
report += (f"\n\tInput Power: {input_power_full_ifo:.3f} W")

# %%
prg_estimate = Tp * trx_power_full_ifo / trx_power_find_ir * input_power_find_ir/input_power_full_ifo
report += (f"\nPRG Estimate: {prg_estimate:.1f}\n")
print(report)