#!/usr/bin/env python3

import json
from pathlib import Path


class LoginInfoMigrator:
    login_info_dir_path_old = Path('/var/log/astra')
    login_info_dir_path_new = login_info_dir_path_old / 'login'

    def migrate(self):
        self.login_info_dir_path_new.mkdir(parents=True, exist_ok=True)

        login_files = list(self.login_info_dir_path_old.glob('*'))

        if not login_files:
            return

        for login_file in login_files:
            if not (login_file.is_file() and login_file.name.startswith('prevlogin-')):
                continue
            try:
                login_data = json.loads(login_file.read_text())
                if not login_data:
                    continue

                new_data = {}
                for username, mandatory_data in login_data.items():
                    for mandatory_label, data in mandatory_data.items():
                        new_data[mandatory_label] = {}
                        if 'since-timestamp' in data:
                            new_data[mandatory_label]['first_entry_timestamp'] = int(data['since-timestamp'])

                        if 'last-entry-timestamp' in data:
                            new_data[mandatory_label]['previous_entry_timestamp'] = int(data['last-entry-timestamp'])

                        if 'last-session-duration' in data:
                            new_data[mandatory_label]['last_session_duration_seconds'] = int(
                                data['last-session-duration'])

                        new_data[mandatory_label]['auth_attempts'] = {
                            'success': int(data.get('successed-entries', 0)),
                            'fail': int(data.get('failed-entries', 0))
                        }

                new_file_path = self.login_info_dir_path_new / login_file.name.split('-')[1]
                new_file_path.write_text(json.dumps(new_data, ensure_ascii=False))

                login_file.unlink()

            except Exception as err:
                print(f'Error migrating user login data {login_file.absolute()}: {err}')

        print(
            f"Successfully migrated user login data from '{self.login_info_dir_path_old.absolute()}' to '{self.login_info_dir_path_new.absolute()}'.")


if __name__ == '__main__':
    migrator = LoginInfoMigrator()
    migrator.migrate()
