import numpy as np
import pandas as pd

from skan import io

from skimage._shared._tempfile import temporary_file


def test_write_excel_tables():
    num_sheets = np.random.randint(1, 4)
    num_cols = np.random.randint(1, 5, size=num_sheets)
    num_rows = np.random.randint(20, 40, size=num_sheets)
    tables = []
    for m, n in zip(num_rows, num_cols):
        columns = [f'column{i}' for i in range(n)]
        data = np.random.random((m, n))
        tables.append(pd.DataFrame(data=data, columns=columns))
    sheet_names = [f'sheet {i}' for i in range(num_sheets)]
    kwargs = dict(zip(sheet_names, tables))
    kwargs['config'] = {'image files': ['image1.tif', 'image2.tif'],
                        'image format': 'fei',
                        'threshold radius': 5e-8}
    with temporary_file(suffix='.xlsx') as file:
        io.write_excel(file, **kwargs)
        tables_in = [pd.read_excel(file, sheet_name=name, index_col=0)
                     for name in sheet_names]
        config_in_df = pd.read_excel(file, sheet_name='config')
        config_in = dict(zip(config_in_df['parameters'],
                             config_in_df['values']))
    for table, table_in in zip(tables, tables_in):
        assert list(table.columns) == list(table_in.columns)
        np.testing.assert_allclose(table_in.values, table.values)
    for key, val in kwargs['config'].items():
        str(val) == str(config_in[key])