#!/usr/bin/env python3
"""
SeismicDetect Gateway Client
Open-source IoT Gateway untuk menghubungkan hardware ke platform SeismicDetect
"""

import json
import time
import threading
import logging
import serial
import requests
import yaml
import socket
import sys
import os
from datetime import datetime
from typing import Dict, List, Any, Optional

# Setup logging
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger('SeismicGateway')

class SeismicGateway:
    def __init__(self, config_path: str = 'config.yaml'):
        self.config = self.get_default_config()
        self.device_id = None
        self.api_key = None
        self.is_registered = False
        self.data_buffer = []
        self.running = True
        
    def get_default_config(self) -> Dict:
        return {
            'gateway': {
                'name': 'Seismic Gateway',
                'device_id': f'GATEWAY_{os.getenv("DEVICE_ID", "001")}',
                'type': 'gateway'
            },
            'server': {
                'url': os.getenv('SERVER_URL', 'http://localhost:8000'),
                'api_endpoint': '/api/gateway/data',
                'register_endpoint': '/api/gateway/register',
                'heartbeat_endpoint': '/api/gateway/heartbeat'
            },
            'hardware': {
                'serial': {'enabled': True, 'baud_rate': 115200, 'timeout': 1},
                'network': {'enabled': True, 'port': 5000}
            },
            'data': {
                'batch_size': 10,
                'send_interval': 2,
                'heartbeat_interval': 30
            }
        }
    
    def run(self):
        logger.info("Starting SeismicDetect Gateway...")
        logger.info("Gateway is running! Waiting for data...")
        
        try:
            while self.running:
                time.sleep(1)
        except KeyboardInterrupt:
            logger.info("Shutting down...")
            self.running = False
            logger.info("Gateway stopped")

def main():
    gateway = SeismicGateway()
    gateway.run()

if __name__ == '__main__':
    main()
