#!/usr/bin/env python3
import pymysql
from datetime import datetime

# Source database configuration
source_config = {
    'host': '10.40.180.35',
    'user': 'root',
    'password': '4Tq73tXMcUbEJ5Q3t3',
    'database': 'mcube_cl1',
    'charset': 'utf8mb4'
}

# Destination database configuration
dest_config = {
    'host': '10.0.0.109',
    'user': 'admin',
    'password': 'mcube@admin123',
    'database': 'voicebot_cluster',
    'charset': 'utf8mb4'
}

def sync_calls(bid, date_str, source_table='callhistory'):
    """Sync calls from source to destination database"""

    # Connect to source database
    source_conn = pymysql.connect(**source_config)
    source_cursor = source_conn.cursor(pymysql.cursors.DictCursor)

    # Connect to destination database
    dest_conn = pymysql.connect(**dest_config)
    dest_cursor = dest_conn.cursor()

    try:
        # Fetch calls from source
        query = f"""
            SELECT
                callid, bid, agentname, groupname, starttime, endtime,
                dialstatus, direction, filename, emp_phone, clicktocalldid
            FROM {bid}_{source_table}
            WHERE DATE(starttime) = %s
            AND dialstatus IN ('ANSWER', 'CANCEL', 'No Agent Available')
        """
        # TODO limt the query to only get 100
        source_cursor.execute(query, (date_str,))
        calls = source_cursor.fetchall()

        print(f"Found {len(calls)} calls for {date_str}")
        
        #redundant
        if len(calls) == 0:
            print("No calls to sync")
            return 0

        if len(calls) >= 105:
            print(f"Found {len(calls)} calls which is >= 105. Skipping sync.")
            return 0

        # Insert into destination
        insert_query = f"""
            INSERT INTO {bid}_raw_calls
            (bid, callid, fileurl, status, agentname, groupname, call_starttime, call_endtime,
             call_status, agent_callinfo, customer_callinfo, direction,
             transcription_requested, transcription_status, selected_for_processing)
            VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
            ON DUPLICATE KEY UPDATE
            fileurl = VALUES(fileurl),
            agentname = VALUES(agentname),
            groupname = VALUES(groupname),
            call_starttime = VALUES(call_starttime),
            call_endtime = VALUES(call_endtime),
            call_status = VALUES(call_status),
            agent_callinfo = VALUES(agent_callinfo),
            customer_callinfo = VALUES(customer_callinfo),
            direction = VALUES(direction)
        """

        inserted = 0
        updated = 0

        for call in calls:
            dest_cursor.execute(insert_query, (
                call['bid'],
                call['callid'],
                call['filename'] or '',
                0,  # status
                call['agentname'] or '',
                call['groupname'] or '',
                call['starttime'],
                call['endtime'],
                call['dialstatus'] or '',
                call['emp_phone'] or '',
                call['clicktocalldid'] or '',
                call['direction'] or 'inbound',
                0,  # transcription_requested
                'not_requested',  # transcription_status
                0  # selected_for_processing
            ))

            if dest_cursor.rowcount == 1:
                inserted += 1
            elif dest_cursor.rowcount == 2:
                updated += 1

        dest_conn.commit()

        print(f"✅ Synced {len(calls)} calls: {inserted} inserted, {updated} updated")
        return len(calls)

    except Exception as e:
        print(f"❌ Error syncing calls: {e}")
        dest_conn.rollback()
        return 0
    finally:
        source_cursor.close()
        source_conn.close()
        dest_cursor.close()
        dest_conn.close()

if __name__ == '__main__':
    import sys

    bid = '7987'
    date_str = sys.argv[1] if len(sys.argv) > 1 else datetime.now().strftime('%Y-%m-%d')
    source_table = sys.argv[2] if len(sys.argv) > 2 else 'callhistory'

    print(f"Syncing calls for BID {bid} on {date_str} from {source_table}...")
    synced = sync_calls(bid, date_str, source_table)
    print(f"Sync completed. {synced} calls synced.")
