import pandas as pd
from pm4py.objects.conversion.log import converter as log_converter
from pm4py.algo.discovery.alpha import algorithm as alpha_miner
from pm4py.visualization.petri_net import visualizer as pn_visualizer
from pm4py.objects.log.util import dataframe_utils
from pm4py.objects.conversion.log import converter as log_converter
from pm4py.algo.discovery.alpha import algorithm as alpha_miner
from pm4py.visualization.petri_net import visualizer as pn_visualizer
from pm4py.visualization.petri_net.util import performance_map 

# csv_filename='Insurance_claims_event_log.csv'
# csv_filename='Business Travel Permits.csv'
csv_filename='Parent-Child Union Output.csv'
# csv_filename='PM4PY_Dummy_Event_Log_100_Cases_pm4py.csv'
# csv_filename='PM4Py_Dummy_Event_Log-congested-business-process.csv'

# 1. Load CSV event log
df = pd.read_csv(csv_filename)
# df = pd.read_csv(csv_filename,sep=';')
# print(df.head()) 

# 2. Format timestamps properly
df['timestamp'] = pd.to_datetime(df['timestamp'])

# 3. Ensure column names match PM4Py expectations
df = dataframe_utils.convert_timestamp_columns_in_df(df)

# 4. Convert to event log object
event_log = log_converter.apply(df, parameters={
    log_converter.Variants.TO_EVENT_LOG.value.Parameters.CASE_ID_KEY: 'case_id'})

# 5. Discover process model using Alpha Miner
net, initial_marking, final_marking = alpha_miner.apply(event_log)

# 6. Visualize Petri Net
gviz = pn_visualizer.apply(net, initial_marking, final_marking)
pn_visualizer.view(gviz)


