#include <stdio.h>
#include <string.h>
#include "chown_validator.h"
#define STATS_FILE "chown_stats.txt"
void load_stats_from_file(CheckStats *stats) {
FILE *f = fopen(STATS_FILE, "r");
if (!f) {
stats->success_count = 0;
stats->failed_count = 0;
return;
}
if (fscanf(f, "%d %d", &stats->success_count, &stats->failed_count) != 2) {
stats->success_count = 0;
stats->failed_count = 0;
}
fclose(f);
}
void save_stats_to_file(const CheckStats *stats) {
FILE *f = fopen(STATS_FILE, "w");
if (f) {
fprintf(f, "%d %d\n", stats->success_count, stats->failed_count);
fclose(f);
}
}
int main() {
char line[4096];
CheckStats stats;
while (fgets(line, sizeof(line), stdin)) {
line[strcspn(line, "\r\n")] = '\0';
if (strlen(line) == 0) continue;
// Обработка внутренних команд статистики
if (strcmp(line, "getstats") == 0) {
load_stats_from_file(&stats);
printf("%d %d %d\n", stats.success_count, stats.failed_count, stats.success_count + stats.failed_count);
fflush(stdout);
continue;
}
if (strcmp(line, "getsuccess") == 0) {
load_stats_from_file(&stats);
printf("%d\n", stats.success_count);
fflush(stdout);
continue;
}
if (strcmp(line, "getfailed") == 0) {
load_stats_from_file(&stats);
printf("%d\n", stats.failed_count);
fflush(stdout);
continue;
}
if (strcmp(line, "resetstats") == 0) {
stats.success_count = 0;
stats.failed_count = 0;
save_stats_to_file(&stats);
printf("\n");
fflush(stdout);
continue;
}
ParsedCommand cmd = parse_chown_command(line);
int valid = check_command(&cmd);
int has_help_version = 0, has_reference_key = 0, key_end_index = 1;
if (valid) {
valid = check_keys(&cmd, &has_help_version, &has_reference_key, &key_end_index);
}
if (valid) {
valid = check_arguments(&cmd, key_end_index, has_help_version, has_reference_key);
}
load_stats_from_file(&stats);
if (valid) {
stats.success_count++;
printf("True\n");
} else {
stats.failed_count++;
printf("False\n");
}
save_stats_to_file(&stats);
fflush(stdout);
}
return 0;
}