"""reading the conventions in a weather-station export

Generated from src/content/docs/reference/value-patterns.md.
Run with the documented Fieldwork release in a writable directory.
Exports are saved there using the filenames shown in the walkthrough.
"""

import pandas as pd
import fieldwork as fw

# Synthetic records: two stations, four exports each; one mixed unit label.
df = pd.DataFrame(
    {
        "sample_id": [
            "WX-001",
            "WX-002",
            "WX-003",
            "WX-004",
            "WX-005",
            "WX-006",
            "WX-007",
            "WX/008",
        ],
        "station": ["north"] * 4 + ["south"] * 4,
        "unit": ["C", "C", "C", "C", "C", "C", "degC", "C"],
        "temperature_c": [0, 5, 10, 15, 20, 25, None, 30],
        "rain_mm": [0, 10, 20, 30, 0, 10, None, 20],
        "channel_1": [1, 2, 4, None, 3, 5, 6, 8],
        "channel_2": [8, 7, 6, None, 4, 3, 2, 1],
    }
)
df["temperature_k"] = df["temperature_c"] + 273.15
df["rain_cm"] = df["rain_mm"] / 10

features = [
    "sample_id",
    "unit",
    "temperature_c",
    "temperature_k",
    "rain_mm",
    "rain_cm",
    "channel_1",
    "channel_2",
]
patterns = fw.value_patterns(
    df,
    features=features,
    by=["station"],
    limits={"max_patterns": 1, "example_limit": 2},
)
print(fw.render_plaintext(patterns, max_lines=10))

summaries = patterns.to_frame("summaries").set_index("feature")
for feature in ["sample_id", "temperature_c"]:
    row = summaries.loc[feature]
    print(
        feature,
        "populated=",
        row["populated"],
        "missing=",
        row["missing"],
    )
ids = patterns["summaries"][0]
print("identifier formats:", ids["formats"])
print(
    "distinct formats:",
    ids["format_count"],
    "omitted format rows:",
    ids["omitted_format_rows"],
)
print(
    "temperature grid:",
    summaries.loc["temperature_c", "observed_step"],
    summaries.loc["temperature_c", "on_observed_step_grid"],
)

findings = patterns.to_frame("findings").set_index("id")
print(findings[["pattern", "statement"]].to_string())

conversions = findings.loc[["f9", "f10"]]
columns = [
    "pattern",
    "measurements.value",
    "measurements.evaluated_rows",
    "measurements.excluded_rows",
]
print(conversions[columns].to_string())

rain_rows = patterns.inspect(df, "f10", all_matches=True)
print(
    rain_rows[["sample_id", "rain_mm", "rain_cm"]].to_string(
        index=False
    )
)

print(patterns.to_frame("families").to_string(index=False))

# f12 is the station-to-unit constancy finding in the table above.
unit_rows = patterns.inspect(
    df, "f12", exceptions=True, all_matches=True
)
print(
    unit_rows[["sample_id", "station", "unit"]].to_string(index=False)
)

expanded = patterns.recompute(df, limits={"max_patterns": 2})
print("Identifier formats:", expanded["summaries"][0]["formats"])

usual_format = df["sample_id"].str.fullmatch(r"WX-\d{3}")
print(df.loc[~usual_format, ["sample_id"]].to_string(index=False))

bounded = patterns.recompute(df, limits={"max_pairs": 1})
print("Full pair coverage:", patterns["coverage"])
print("Limited pair coverage:", bounded["coverage"])
