import config
from api_wrappers import hf_data_loader

N_EXAMPLES = 15


def get_example_prompt_end_to_start(start_msg, end_msg):
    return f"""START OF THE EXAMPLE

For the following edited commit message:
START OF THE EDITED COMMIT MESSAGE 
{end_msg}
END OF THE EDITED COMMIT MESSAGE

You would output the following initial commit message:
START OF THE INITIAL COMMIT MESSAGE
{start_msg}
END OF THE INITIAL COMMIT MESSAGE

END OF THE EXAMPLE"""


def get_example_prompt_start_to_end(start_msg, end_msg):
    return f"""START OF THE EXAMPLE

For the following LLM-generated commit message:
START OF THE GENERATED COMMIT MESSAGE 
{start_msg}
END OF THE GENERATED COMMIT MESSAGE

You would output the following improved commit message:
START OF THE IMPROVED COMMIT MESSAGE
{end_msg}
END OF THE IMPROVED COMMIT MESSAGE

END OF THE EXAMPLE"""


manual_df = hf_data_loader.load_raw_rewriting_as_pandas()[["commit_msg_start", "commit_msg_end"]]
manual_df = manual_df.sample(n=N_EXAMPLES, random_state=config.RANDOM_STATE)


def generate_examples(end_to_start):
    prompt_fn = get_example_prompt_end_to_start if end_to_start else get_example_prompt_start_to_end
    examples = [prompt_fn(row["commit_msg_start"], row["commit_msg_end"]) for _, row in manual_df.iterrows()]

    return "\n".join(examples)


EXAMPLES_END_TO_START = generate_examples(end_to_start=True)
EXAMPLES_START_TO_END = generate_examples(end_to_start=False)