import pymysql
import sys
import io

sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

DB_CONFIG = {
    'host': 'officialsite.kr',
    'user': 'admin',
    'password': 'dlgks~123',
    'port': 23306,
    'database': 'app_master',
    'charset': 'utf8mb4'
}


def create_tables():
    connection = None
    try:
        print('Connecting to database...')
        connection = pymysql.connect(**DB_CONFIG)
        cursor = connection.cursor()

        cursor.execute('SET FOREIGN_KEY_CHECKS = 0')

        print('Creating evidence_note_ad_settings table...')
        cursor.execute('''
            CREATE TABLE IF NOT EXISTS evidence_note_ad_settings (
                id INT PRIMARY KEY AUTO_INCREMENT,
                ad_mode ENUM('test', 'release') DEFAULT 'test',
                ios_banner_ad_id VARCHAR(100) DEFAULT 'ca-app-pub-1472588829285826/6870074029',
                ios_interstitial_ad_id VARCHAR(100) DEFAULT 'ca-app-pub-1472588829285826/4561911780',
                android_banner_ad_id VARCHAR(100) DEFAULT 'ca-app-pub-1472588829285826/2847068537',
                android_interstitial_ad_id VARCHAR(100) DEFAULT 'ca-app-pub-1472588829285826/1809319038',
                test_ios_banner_ad_id VARCHAR(100) DEFAULT 'ca-app-pub-3940256099942544/2934735716',
                test_ios_interstitial_ad_id VARCHAR(100) DEFAULT 'ca-app-pub-3940256099942544/4411468910',
                test_android_banner_ad_id VARCHAR(100) DEFAULT 'ca-app-pub-3940256099942544/6300978111',
                test_android_interstitial_ad_id VARCHAR(100) DEFAULT 'ca-app-pub-3940256099942544/1033173712',
                updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
                created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
        ''')

        print('Creating evidence_note_pdf_exports table...')
        cursor.execute('''
            CREATE TABLE IF NOT EXISTS evidence_note_pdf_exports (
                id BIGINT PRIMARY KEY AUTO_INCREMENT,
                record_id VARCHAR(64) NULL,
                proof_id VARCHAR(64) NULL,
                record_title VARCHAR(255) NULL,
                counterparty_name VARCHAR(255) NULL,
                action ENUM('export', 'share') NOT NULL,
                file_name VARCHAR(255) NULL,
                file_size_bytes INT NULL,
                amount DECIMAL(14,2) NULL,
                status VARCHAR(32) NULL,
                device_summary TEXT NULL,
                platform VARCHAR(32) NULL,
                locale VARCHAR(16) NULL,
                ip_address VARCHAR(45) NULL,
                user_agent TEXT NULL,
                created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                INDEX idx_evidence_note_pdf_exports_created_at (created_at),
                INDEX idx_evidence_note_pdf_exports_action (action),
                INDEX idx_evidence_note_pdf_exports_record_id (record_id),
                INDEX idx_evidence_note_pdf_exports_proof_id (proof_id)
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
        ''')

        print('Creating evidence_note_records table...')
        cursor.execute('''
            CREATE TABLE IF NOT EXISTS evidence_note_records (
                id VARCHAR(36) PRIMARY KEY,
                user_id VARCHAR(36) NOT NULL,
                device_serial VARCHAR(255) NOT NULL,
                record_id VARCHAR(64) NOT NULL,
                title VARCHAR(255) NULL,
                counterparty_name VARCHAR(255) NULL,
                status VARCHAR(32) NULL,
                event_at DATETIME NULL,
                updated_at_source DATETIME NULL,
                payload LONGTEXT NOT NULL,
                created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
                UNIQUE KEY unique_evidence_note_record_user (user_id, record_id),
                INDEX idx_evidence_note_records_user (user_id),
                INDEX idx_evidence_note_records_device (device_serial),
                INDEX idx_evidence_note_records_updated (updated_at_source)
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
        ''')

        print('Creating evidence_note_attachment_uploads table...')
        cursor.execute('''
            CREATE TABLE IF NOT EXISTS evidence_note_attachment_uploads (
                id VARCHAR(36) PRIMARY KEY,
                user_id VARCHAR(36) NOT NULL,
                device_serial VARCHAR(255) NOT NULL,
                local_upload_key VARCHAR(255) NOT NULL,
                local_asset_key VARCHAR(255) NULL,
                attachment_type ENUM('photo', 'audio', 'signature') NOT NULL,
                original_filename VARCHAR(255) NULL,
                mime_type VARCHAR(120) NULL,
                file_size_bytes BIGINT NULL,
                s3_key VARCHAR(255) NULL,
                cdn_url TEXT NULL,
                status ENUM('uploaded', 'failed') DEFAULT 'uploaded',
                created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
                UNIQUE KEY unique_evidence_note_attachment_local (user_id, local_upload_key),
                INDEX idx_evidence_note_attachment_user (user_id),
                INDEX idx_evidence_note_attachment_device (device_serial),
                INDEX idx_evidence_note_attachment_asset (local_asset_key)
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
        ''')

        print('Seeding default evidence_note_ad_settings row...')
        cursor.execute("""
            INSERT INTO evidence_note_ad_settings (
                id,
                ad_mode,
                ios_banner_ad_id,
                ios_interstitial_ad_id,
                android_banner_ad_id,
                android_interstitial_ad_id,
                test_ios_banner_ad_id,
                test_ios_interstitial_ad_id,
                test_android_banner_ad_id,
                test_android_interstitial_ad_id
            ) VALUES (
                1,
                'test',
                'ca-app-pub-1472588829285826/6870074029',
                'ca-app-pub-1472588829285826/4561911780',
                'ca-app-pub-1472588829285826/2847068537',
                'ca-app-pub-1472588829285826/1809319038',
                'ca-app-pub-3940256099942544/2934735716',
                'ca-app-pub-3940256099942544/4411468910',
                'ca-app-pub-3940256099942544/6300978111',
                'ca-app-pub-3940256099942544/1033173712'
            )
            ON DUPLICATE KEY UPDATE
                ios_banner_ad_id = VALUES(ios_banner_ad_id),
                ios_interstitial_ad_id = VALUES(ios_interstitial_ad_id),
                android_banner_ad_id = VALUES(android_banner_ad_id),
                android_interstitial_ad_id = VALUES(android_interstitial_ad_id),
                test_ios_banner_ad_id = VALUES(test_ios_banner_ad_id),
                test_ios_interstitial_ad_id = VALUES(test_ios_interstitial_ad_id),
                test_android_banner_ad_id = VALUES(test_android_banner_ad_id),
                test_android_interstitial_ad_id = VALUES(test_android_interstitial_ad_id)
        """)

        cursor.execute('SET FOREIGN_KEY_CHECKS = 1')
        connection.commit()
        print('✅ Evidence Note tables created successfully')
    except Exception as e:
        print(f'❌ Error: {e}')
        if connection:
            connection.rollback()
    finally:
        if connection:
            connection.close()
            print('Database connection closed.')


if __name__ == '__main__':
    create_tables()
