import os
import re
import shutil
import mysql.connector

def scan_html_files():
    try:
        # Database configuration from environment variables
        db_config = {
            'user': os.getenv('DB_USER'),
            'password': os.getenv('DB_PASSWORD'),
            'host': os.getenv('DB_HOST'),
            'database': os.getenv('DB_NAME'),
            'port': int(os.getenv('DB_PORT', 3306))
        }
        
        # Set up base directories
        campaigns_directory = "/var/www/html/campaigns"
        success_directory = "/var/www/html/success_pages"

        # Ensure the success directory exists
        if not os.path.exists(success_directory):
            os.makedirs(success_directory)

        # Success keywords pattern
        success_keywords = re.compile(
            r"receipt|payment success|thank you for your purchase|Thank you\. Your order has been received\.",
            re.IGNORECASE
        )

        # Get all campaign directories
        campaign_dirs = [d for d in os.listdir(campaigns_directory) 
                        if os.path.isdir(os.path.join(campaigns_directory, d))]
        
        print(f"Found {len(campaign_dirs)} campaign directories to process")

        # Dictionary to track success page counts for each campaign
        success_page_counts = {}

        for campaign_code in campaign_dirs:
            campaign_path = os.path.join(campaigns_directory, campaign_code)
            
            # Process HTML files in this campaign directory
            html_files = [f for f in os.listdir(campaign_path) if f.endswith(".html")]
            print(f"Processing {len(html_files)} HTML files for campaign {campaign_code}")
            
            # Initialize success count for this campaign
            success_count = 0
            
            for file_name in html_files:
                file_path = os.path.join(campaign_path, file_name)
                
                # Simple file reading - try both approaches
                try:
                    with open(file_path, 'r') as file:
                        content = file.read()
                except:
                    try:
                        with open(file_path, 'rb') as file:
                            content = file.read().decode('utf-8', errors='replace')
                    except Exception as e:
                        print(f"Could not read file {file_name}: {e}")
                        continue
                
                # Check for success indicators
                if success_keywords.search(content):
                    uuid = file_name.replace('.html', '')
                    print(f"Found success page: {uuid} in campaign {campaign_code}")
                    success_count += 1

                    # Create campaign directory in success_pages if needed
                    campaign_success_dir = os.path.join(success_directory, campaign_code)
                    if not os.path.exists(campaign_success_dir):
                        os.makedirs(campaign_success_dir)
                        print(f"Created directory: {campaign_success_dir}")

                    # Copy the HTML file to the campaign directory
                    success_file_path = os.path.join(campaign_success_dir, file_name)
                    shutil.copy(file_path, success_file_path)
                    print(f"Copied file to: {success_file_path}")
            
            # Store success page count for this campaign
            if success_count > 0:
                success_page_counts[campaign_code] = success_count
                print(f"Campaign {campaign_code} has {success_count} success pages")

        # Update the database with success page counts
        if success_page_counts:
            print("Updating campaign table with success page counts...")
            conn = mysql.connector.connect(**db_config)
            cursor = conn.cursor()
            
            try:
                for campaign_code, count in success_page_counts.items():
                    # Update the sales_success_page column in tbl_campaign
                    cursor.execute("""
                        UPDATE tbl_campaigns 
                        SET sales_success_page = %s 
                        WHERE code = %s
                    """, (count, campaign_code))
                    print(f"Updated campaign {campaign_code} with {count} success pages")
                
                # Commit changes
                conn.commit()
                print("Database updates committed successfully")
            except mysql.connector.Error as err:
                print(f"Database error: {err}")
                conn.rollback()
            finally:
                cursor.close()
                conn.close()
                print("Database connection closed")

    except Exception as e:
        print(f"An error occurred: {e}")

if __name__ == "__main__":
    scan_html_files()