from flask import Flask, request
import requests
from datetime import datetime

app = Flask(__name__)

API_URL = "https://rsw.algosofttech.com/api/attendance/savepythonapi"

def parse_datetime(dt_str):
    """Split a 'YYYY-MM-DD HH:MM:SS' string into date and time parts."""
    try:
        dt = datetime.strptime(dt_str.strip(), "%Y-%m-%d %H:%M:%S")
        return dt.strftime("%Y-%m-%d"), dt.strftime("%H:%M:%S")
    except ValueError:
        return None, None

@app.route('/iclock/cdata', methods=['GET', 'POST'])
def receive_attendance():
    raw_data = request.data

    # Convert bytes to string
    data = raw_data.decode('utf-8')
    print("Raw Data:\n", data)

    lines = data.strip().split('\n')

    for line in lines:
        if not line.strip():
            continue

        parts = line.split('\t')

        if len(parts) >= 2:
            user_id   = parts[0].strip()
            timestamp = parts[1].strip()

            # Skip non-numeric / OPLOG entries
            if not user_id.isdigit():
                print(f"Skipping non-employee row: {line.strip()}")
                continue

            attendance_date, attendance_time = parse_datetime(timestamp)

            if not attendance_date or not attendance_time:
                print(f"Skipping row with invalid datetime: {line.strip()}")
                continue

            payload = {
                "employee_id":     user_id,
                "attendance_date": attendance_date,
                "attendance_time": attendance_time,
            }

            try:
                response = requests.post(API_URL, data=payload, timeout=10)
                if response.status_code == 200:
                    print(f"[SUCCESS] employee_id={user_id} | date={attendance_date} | time={attendance_time} | Response: {response.text}")
                else:
                    print(f"[FAILED]  employee_id={user_id} | Status: {response.status_code} | Response: {response.text}")
            except requests.exceptions.RequestException as e:
                print(f"[ERROR]   employee_id={user_id} | Exception: {e}")

    return "OK"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port='5003')
