/**
 * Auto-commit script
 * 5분마다 자동으로 git commit 수행
 */

const { exec } = require('child_process');
const fs = require('fs');
const path = require('path');

// 설정
const INTERVAL_MINUTES = 5;
const INTERVAL_MS = INTERVAL_MINUTES * 60 * 1000;
const LOG_FILE = path.join(__dirname, 'auto-commit.log');

// 로그 함수
function log(message) {
  const timestamp = new Date().toISOString();
  const logMessage = `[${timestamp}] ${message}\n`;
  console.log(logMessage.trim());
  fs.appendFileSync(LOG_FILE, logMessage);
}

// Git 명령 실행
function runGitCommand(command) {
  return new Promise((resolve, reject) => {
    exec(command, { cwd: path.join(__dirname, '..') }, (error, stdout, stderr) => {
      if (error) {
        reject({ error, stderr });
      } else {
        resolve(stdout);
      }
    });
  });
}

// 자동 커밋 수행
async function autoCommit() {
  try {
    log('🔄 Auto-commit 시작...');

    // git status 확인
    const status = await runGitCommand('git status --porcelain');

    if (!status.trim()) {
      log('✅ 변경사항 없음 - 커밋 스킵');
      return;
    }

    log(`📝 변경사항 감지:\n${status}`);

    // git add .
    await runGitCommand('git add .');
    log('✅ git add 완료');

    // 커밋 메시지 생성
    const now = new Date();
    const dateStr = now.toISOString().slice(0, 19).replace('T', ' ');
    const commitMessage = `Auto-commit: ${dateStr}`;

    // git commit
    await runGitCommand(`git commit -m "${commitMessage}"`);
    log(`✅ 커밋 완료: ${commitMessage}`);

    // 최근 커밋 정보 출력
    const lastCommit = await runGitCommand('git log -1 --oneline');
    log(`📌 최근 커밋: ${lastCommit.trim()}`);

  } catch (err) {
    if (err.stderr && err.stderr.includes('nothing to commit')) {
      log('✅ 변경사항 없음 - 커밋 스킵');
    } else {
      log(`❌ 오류 발생: ${err.stderr || err.error?.message || err}`);
    }
  }
}

// 스크립트 시작
log('========================================');
log(`🚀 Auto-commit 스크립트 시작 (${INTERVAL_MINUTES}분 간격)`);
log('========================================');

// 즉시 한 번 실행
autoCommit();

// 주기적 실행
const intervalId = setInterval(autoCommit, INTERVAL_MS);

// 종료 처리
process.on('SIGINT', () => {
  log('⏹️  Auto-commit 스크립트 종료');
  clearInterval(intervalId);
  process.exit(0);
});

process.on('SIGTERM', () => {
  log('⏹️  Auto-commit 스크립트 종료');
  clearInterval(intervalId);
  process.exit(0);
});

log(`⏰ 다음 커밋 예정 시간: ${new Date(Date.now() + INTERVAL_MS).toLocaleString('ko-KR')}`);
