#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <err.h>
#include <string.h>
#include <time.h>

void sig_handler(int signo);
void print_rem_time(void);

int         counter = 60;
int         space = 2;
time_t      t1;
const char  CONFIG_FILE[] = ".countdown";

int
main(int argc, char *argv[])
{

    if (argc > 1) {
        if ((counter = atoi(argv[1])) <= 0)
            errx(EXIT_FAILURE, "atoi");
        space = strlen(argv[1]);
    }

    print_rem_time();

    if (signal(SIGALRM, sig_handler) == SIG_ERR)
        err(EXIT_FAILURE, "signal (SIGALRM)");

    if (signal(SIGINT, sig_handler) == SIG_ERR)
        err(EXIT_FAILURE, "signal (SIGINT)");

    t1 = time(NULL);        // start timestamp

    while (1) {
        alarm(1);
        pause();
    }

    exit(EXIT_FAILURE);
}

void
sig_handler(int signo)
{
    if (signo == SIGALRM) {
        if (--counter < 0) {
            printf("\ncounter done\n");
            exit(EXIT_SUCCESS);
        }
        print_rem_time();
    } else if (signo == SIGINT) {
        FILE *fp;
        char buf[50];

        if ((fp = fopen(CONFIG_FILE, "a")) == NULL) {
            warn("%s", "config_file");
        } else {
            time_t t2;
            t2 = time(&t2);

            sprintf(buf, "%ld-%ld-%ld\n", t2-t1, t1, t2);
            fwrite(buf, sizeof(char), strlen(buf), fp);
        }
        exit(EXIT_FAILURE);
    }
}

void
print_rem_time(void)
{
    int hour, min, sec;

    hour = counter / 3600;
    sec = counter % 60;
    min = counter / 60 % 60; //(counter - (hour * 3600 + sec)) / 60;

    printf("\r%02d:%02d:%02d", hour, min, sec);
    fflush(stdout);
}
