#!/usr/bin/env python3

import argparse
import re
import sys


def sub(path, pattern, repl, expected_count=1):
    with open(path) as fh:
        content = fh.read()
    content, count = re.subn(pattern, repl, content, flags=re.MULTILINE)
    if expected_count is not None:
        assert count == expected_count, f"Pattern {pattern} replacement failed!"
    with open(path, "wt") as fh:
        fh.write(content)


def write_version(version: str):
    for p in [
        ".github/workflows/ci-docker.yml",
        ".github/workflows/release-dev.yml",
        ".github/workflows/release.yml",
    ]:
        sub(p, r'base_version=".*"', f'base_version="{version}"')

    sub(
        "docker/Dockerfile",
        r"ARG BUILD_FROM=esphome/esphome-base-amd64:.*",
        f"ARG BUILD_FROM=esphome/esphome-base-amd64:{version}",
    )
    sub(
        "docker/Dockerfile.dev",
        r"FROM esphome/esphome-base-amd64:.*",
        f"FROM esphome/esphome-base-amd64:{version}",
    )
    sub(
        "docker/Dockerfile.lint",
        r"FROM esphome/esphome-lint-base:.*",
        f"FROM esphome/esphome-lint-base:{version}",
    )


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("new_version", type=str)
    args = parser.parse_args()

    version = args.new_version
    print(f"Bumping to {version}")
    write_version(version)
    return 0


if __name__ == "__main__":
    sys.exit(main() or 0)
