#!/usr/bin/env python

import os
import glob


def annotate_file(file, msg):
  if os.getenv('CI') is not None:
    print(f'::error file={file} msg={msg}')


def does_clean_snapshots(pkg_dir):
  try:
    with open(f'{pkg_dir}/testmain_test.go', 'r') as file:
      for _, line in enumerate(file):
        if '	testutility.CleanSnapshots(m)' in line:
          return True
    return False
  except FileNotFoundError:
    return False


def report_lack_of_snapshot_cleaning(directory):
  if os.path.exists(f'{directory}/testmain_test.go'):
    file = f'{directory}/testmain_test.go'

    annotate_file(file, 'Make sure that `TestMain` is calling `testutility.CleanSnapshots(m)` after the tests have been run')
    print(f'{file} is not calling `testutility.CleanSnapshots(m)`')
  else:
    try:
      file = list(glob.iglob(os.path.join(directory, '*_test.go')))[0]
    except IndexError:
      file = directory

    annotate_file(file, 'Please add a `testmain_test.go` file with a `TestMain` function that calls `testutility.CleanSnapshots(m)` after the tests have been run')
    print(f'{directory} does not have a `testmain_test.go` file with a `TestMain` function that calls `testutility.CleanSnapshots(m)` after the tests have been run')
  pass


uncleaned_snapshots = False
for snapshot_dir in glob.iglob('**/__snapshots__/', recursive=True):
  parent_dir = os.path.dirname(snapshot_dir[:-1])

  if does_clean_snapshots(parent_dir):
    continue

  report_lack_of_snapshot_cleaning(parent_dir)
  uncleaned_snapshots = True

if uncleaned_snapshots:
  print('')
  print("one or more packages are using snapshots but not ensuring they're cleaned up")
  print('make sure these packages have a testmain_test.go file that defines a TestMain function that calls testutility.CleanSnapshots(m)')
  exit(1)
