#!/usr/bin/python3.13 -s
""" Make a table of dq state information
"""
import sys
import argparse
import h5py as h5
import numpy as np

import pycbc
import pycbc.results

parser = argparse.ArgumentParser(description=__doc__)
pycbc.add_common_pycbc_options(parser)
parser.add_argument('--ifo', required=True)
parser.add_argument('--dq-file', required=True)
parser.add_argument('--output-file')
args = parser.parse_args()

pycbc.init_logging(args.verbose)

dq_states = {
    'dq_state_0': 'Clean',
    'dq_state_1': 'DQ Flag',
    'dq_state_2': 'Autogating',
}

f = h5.File(args.dq_file, 'r')
grp = f[args.ifo]['dq_segments']

livetimes = []
total_livetime = 0
for dq_state in dq_states:
    livetime = grp[dq_state]['livetime'][()]
    livetimes.append(livetime)
    total_livetime += livetime
livetimes.append(total_livetime)

frac_livetimes = [lt / total_livetime for lt in livetimes]
state_names = list(dq_states.values()) + ['Total']
columns = [state_names, livetimes, frac_livetimes]
columns = [np.array(c) for c in columns]
col_names = ['DQ State', 'Livetime', '% of Livetime']

format_strings = [None, '0.0', '0.00%']

html_table = pycbc.results.html_table(columns, col_names,
                                      page_size=len(state_names),
                                      format_strings=format_strings)
title = f'{args.ifo} DQ State Livetimes'
caption = 'Table of DQ state livetimes'

pycbc.results.save_fig_with_metadata(
    str(html_table), args.output_file, title=title,
    caption=caption, cmd=' '.join(sys.argv))
