import pandas as pd


def prepare_ml_data(input_file, output_file):

    data = pd.read_csv(input_file)

    # Convert timestamp to datetime
    data["timestamp"] = pd.to_datetime(data["timestamp"])

    # Basic numeric features
    data["geo_mismatch"] = (
        data["geo_declared"].str.upper()
        != data["geo_ip"].str.upper()
    ).astype(int)

    # Detect suspicious User-Agent
    suspicious_patterns = [
        "bot",
        "crawler",
        "python-requests",
        "curl"
    ]

    data["bad_ua"] = data["user_agent"].str.lower().apply(
        lambda ua: int(
            any(pattern in ua for pattern in suspicious_patterns)
        )
    )

    # Track requests from the same IP
    data["request_count"] = (
        data.groupby("ip").cumcount() + 1
    )

    # Example threshold for training data
    data["high_velocity"] = (
        data["request_count"] >= 3
    ).astype(int)

    # Detect duplicate IP + UA + Creative
    data["duplicate"] = (
        data.duplicated(
            subset=["ip", "user_agent", "creative_id"],
            keep="first"
        )
    ).astype(int)

    # Select ML features
    ml_data = data[
        [
            "request_count",
            "high_velocity",
            "duplicate",
            "geo_mismatch",
            "bad_ua"
        ]
    ]

    ml_data.to_csv(output_file, index=False)

    print(ml_data)


if __name__ == "__main__":

    prepare_ml_data(
        "data/traffic_events.csv",
        "data/ml_features.csv"
    )
