"""
Automated SEO Workflow
End-to-end keyword research and competitor analysis
"""

import json
import pandas as pd
from datetime import datetime
import os
from keyword_researcher import KeywordResearcher
from competitor_analyzer import CompetitorAnalyzer


class AutomatedSEOWorkflow:
    def __init__(self, config_file='config.json'):
        """
        Initialize automated workflow
        
        Args:
            config_file: Path to configuration JSON file
        """
        with open(config_file, 'r') as f:
            self.config = json.load(f)
        
        self.keyword_researcher = KeywordResearcher(config_file)
        self.competitor_analyzer = CompetitorAnalyzer(config_file)
        self.results = {}
    
    def run_full_analysis(self, property_url=None, days=90, top_n_keywords=20):
        """
        Run complete SEO analysis workflow
        
        Args:
            property_url: GSC property URL (if None, will prompt)
            days: Days of GSC data to analyze
            top_n_keywords: Number of top keywords to analyze
            
        Returns:
            Dictionary with all results
        """
        print("\n" + "="*60)
        print("AUTOMATED SEO WORKFLOW")
        print("="*60)
        
        # Step 1: Connect to GSC and fetch data
        print("\n[1/5] Connecting to Google Search Console...")
        self.keyword_researcher.connect()
        
        if not property_url:
            properties = self.keyword_researcher.auth.list_properties()
            if properties:
                print("\nAvailable properties:")
                for i, prop in enumerate(properties, 1):
                    print(f"  {i}. {prop}")
                choice = int(input("\nSelect property number: ")) - 1
                property_url = properties[choice]
            else:
                print("✗ No properties found!")
                return None
        
        print(f"\n[2/5] Fetching GSC data for {property_url}...")
        gsc_data = self.keyword_researcher.fetch_gsc_data(property_url, days)
        
        if not gsc_data:
            print("✗ No GSC data retrieved!")
            return None
        
        # Step 2: Analyze keyword opportunities
        print("\n[3/5] Analyzing keyword opportunities...")
        opportunities = self.keyword_researcher.analyze_opportunities(
            gsc_data, 
            min_impressions=self.config['google_search_console'].get('min_impressions', 10)
        )
        
        print(f"  Found {len(opportunities)} keyword opportunities")
        
        # Step 3: Cluster keywords
        print("\n[4/5] Clustering related keywords...")
        clusters = self.keyword_researcher.cluster_keywords(opportunities)
        print(f"  Created {len(clusters)} keyword clusters")
        
        # Step 4: Analyze competitors for top keywords
        print(f"\n[5/5] Analyzing competitors for top {top_n_keywords} keywords...")
        
        top_keywords = opportunities.head(top_n_keywords)
        competitor_analyses = {}
        
        for idx, row in top_keywords.iterrows():
            keyword = row['query']
            print(f"\n  Analyzing: '{keyword}'")
            
            # Get competitor URLs (from config)
            competitor_urls = self.config.get('competitors', [])
            
            # Scrape and analyze each competitor
            analyses = []
            for url in competitor_urls[:self.config['analysis_settings'].get('max_competitors_per_keyword', 10)]:
                content = self.competitor_analyzer.scrape_page_content(url)
                if content:
                    analysis = self.competitor_analyzer.analyze_content_structure(content, keyword)
                    if analysis:
                        analyses.append(analysis)
            
            # Compare competitors
            if analyses:
                comparison = self.competitor_analyzer.compare_competitors(analyses)
                competitor_analyses[keyword] = comparison
                
                print(f"    ✓ Analyzed {len(analyses)} competitors")
                print(f"    Avg word count: {comparison['avg_word_count']:.0f}")
                print(f"    Avg keyword density: {comparison['avg_keyword_density']:.2f}%")
        
        # Step 5: Generate comprehensive report
        print("\n[6/6] Generating reports...")
        
        self.results = {
            'property_url': property_url,
            'analysis_date': datetime.now().isoformat(),
            'total_keywords': len(opportunities),
            'total_clusters': len(clusters),
            'opportunities': opportunities,
            'clusters': clusters,
            'competitor_analyses': competitor_analyses
        }
        
        # Export reports
        reports_dir = self.config['output']['reports_dir']
        os.makedirs(reports_dir, exist_ok=True)
        
        files = self.keyword_researcher.export_keyword_report(
            opportunities, clusters, reports_dir
        )
        
        # Export competitor analysis
        timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
        competitor_json = f"{reports_dir}/competitor_analysis_{timestamp}.json"
        
        # Convert DataFrames to dicts for JSON serialization
        export_data = {
            'property_url': property_url,
            'analysis_date': datetime.now().isoformat(),
            'competitor_analyses': competitor_analyses
        }
        
        with open(competitor_json, 'w') as f:
            json.dump(export_data, f, indent=2, default=str)
        
        print(f"  ✓ Saved competitor analysis: {competitor_json}")
        
        # Generate master HTML report (both versions)
        master_html_ts = f"{reports_dir}/master_report_{timestamp}.html"
        master_html_static = f"{reports_dir}/index.html"
        self._generate_master_report(master_html_ts)
        self._generate_master_report(master_html_static)
        print(f"  ✓ Saved master report: {master_html_ts}")
        print(f"  ✓ Saved master report: {master_html_static}")
        
        print("\n" + "="*60)
        print("✓ ANALYSIS COMPLETE!")
        print("="*60)
        print(f"\nReports saved to: {reports_dir}/")
        
        return self.results
    
    def _generate_master_report(self, output_path):
        """Generate comprehensive HTML report"""
        opportunities = self.results['opportunities']
        clusters = self.results['clusters']
        competitor_analyses = self.results['competitor_analyses']
        
        html = f"""
        <!DOCTYPE html>
        <html>
        <head>
            <title>SEO Master Report - Conservatory Transformations</title>
            <style>
                body {{ font-family: 'Segoe UI', Arial, sans-serif; margin: 0; padding: 20px; background: #f5f5f5; }}
                .container {{ max-width: 1200px; margin: 0 auto; background: white; padding: 30px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); }}
                h1 {{ color: #2c3e50; border-bottom: 3px solid #3498db; padding-bottom: 10px; }}
                h2 {{ color: #34495e; margin-top: 40px; border-left: 4px solid #3498db; padding-left: 15px; }}
                h3 {{ color: #7f8c8d; }}
                .summary {{ display: flex; justify-content: space-around; margin: 30px 0; }}
                .metric {{ text-align: center; padding: 20px; background: #ecf0f1; border-radius: 8px; }}
                .metric-value {{ font-size: 36px; font-weight: bold; color: #3498db; }}
                .metric-label {{ color: #7f8c8d; margin-top: 5px; }}
                table {{ border-collapse: collapse; width: 100%; margin: 20px 0; }}
                th, td {{ border: 1px solid #ddd; padding: 12px; text-align: left; }}
                th {{ background-color: #3498db; color: white; font-weight: bold; }}
                tr:nth-child(even) {{ background-color: #f9f9f9; }}
                tr:hover {{ background-color: #e8f4f8; }}
                .cluster {{ background: #ecf0f1; padding: 20px; margin: 15px 0; border-radius: 8px; border-left: 4px solid #3498db; }}
                .competitor-box {{ background: #fff; border: 1px solid #ddd; padding: 15px; margin: 10px 0; border-radius: 5px; }}
                .good {{ color: #27ae60; font-weight: bold; }}
                .warning {{ color: #f39c12; font-weight: bold; }}
                .bad {{ color: #e74c3c; font-weight: bold; }}
                .recommendation {{ background: #d5f4e6; border-left: 4px solid #27ae60; padding: 15px; margin: 15px 0; }}
            </style>
        </head>
        <body>
            <div class="container">
                <h1>🎯 SEO Master Report - Conservatory Transformations</h1>
                <p><strong>Property:</strong> {self.results['property_url']}</p>
                <p><strong>Generated:</strong> {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}</p>
                
                <div class="summary">
                    <div class="metric">
                        <div class="metric-value">{len(opportunities)}</div>
                        <div class="metric-label">Total Keywords</div>
                    </div>
                    <div class="metric">
                        <div class="metric-value">{len(clusters)}</div>
                        <div class="metric-label">Keyword Clusters</div>
                    </div>
                    <div class="metric">
                        <div class="metric-value">{opportunities['clicks'].sum():,}</div>
                        <div class="metric-label">Total Clicks</div>
                    </div>
                    <div class="metric">
                        <div class="metric-value">{opportunities['impressions'].sum():,}</div>
                        <div class="metric-label">Total Impressions</div>
                    </div>
                </div>
                
                <h2>📊 Top 20 Keyword Opportunities</h2>
                <p>These keywords have the highest potential for improvement based on impressions, CTR, and current position.</p>
                {opportunities.head(20).to_html(index=False, classes='data-table')}
                
                <h2>🎯 Keyword Clusters</h2>
                <p>Related keywords grouped by topic for content planning.</p>
        """
        
        for i, (cluster_name, data) in enumerate(list(clusters.items())[:10], 1):
            html += f"""
            <div class="cluster">
                <h3>{i}. {cluster_name.title()}</h3>
                <p><strong>Total Opportunity Score:</strong> {data['total_opportunity']:.2f} | 
                   <strong>Keywords:</strong> {data['keyword_count']}</p>
                <ul>
            """
            for kw in data['keywords'][:10]:
                html += f"""<li><strong>{kw['query']}</strong> - 
                    Position: {kw['position']:.1f}, 
                    Clicks: {kw['clicks']}, 
                    Impressions: {kw['impressions']}</li>"""
            html += "</ul></div>"
        
        html += "<h2>🔍 Competitor Analysis</h2>"
        
        for keyword, analysis in list(competitor_analyses.items())[:10]:
            html += f"""
            <div class="competitor-box">
                <h3>Keyword: "{keyword}"</h3>
                <p><strong>Competitors Analyzed:</strong> {analysis['total_analyzed']}</p>
                
                <div class="recommendation">
                    <strong>📝 Content Recommendations:</strong>
                    <ul>
                        <li><strong>Target Word Count:</strong> {analysis['avg_word_count']:.0f} words 
                            (Range: {analysis['min_word_count']}-{analysis['max_word_count']})</li>
                        <li><strong>Target Keyword Density:</strong> {analysis['avg_keyword_density']:.2f}%</li>
                        <li><strong>Headings:</strong> Use ~{analysis['avg_headings']:.0f} headings (H1-H6)</li>
                        <li><strong>Internal Links:</strong> Include ~{analysis['avg_internal_links']:.0f} internal links</li>
                        <li><strong>Keyword in Title:</strong> {analysis['keyword_in_title_pct']:.0f}% of competitors do this</li>
                        <li><strong>Keyword in H1:</strong> {analysis['keyword_in_h1_pct']:.0f}% of competitors do this</li>
                        <li><strong>Schema Markup:</strong> {analysis['schema_usage_pct']:.0f}% of competitors use it</li>
                    </ul>
                </div>
                
                <h4>Top Competitor Examples:</h4>
                <table>
                    <tr>
                        <th>URL</th>
                        <th>Words</th>
                        <th>KW Density</th>
                        <th>Headings</th>
                        <th>In Title</th>
                        <th>In H1</th>
                    </tr>
            """
            
            for comp in analysis['competitors'][:5]:
                title_icon = "✓" if comp['title_has_keyword'] else "✗"
                h1_icon = "✓" if comp['h1_has_keyword'] else "✗"
                
                html += f"""
                <tr>
                    <td><a href="{comp['url']}" target="_blank">{comp['url'][:50]}...</a></td>
                    <td>{comp['word_count']}</td>
                    <td>{comp['keyword_density']:.2f}%</td>
                    <td>{comp['total_headings']}</td>
                    <td>{title_icon}</td>
                    <td>{h1_icon}</td>
                </tr>
                """
            
            html += "</table></div>"
        
        html += """
            </div>
        </body>
        </html>
        """
        
        with open(output_path, 'w', encoding='utf-8') as f:
            f.write(html)


if __name__ == "__main__":
    print("\n" + "="*60)
    print("CONSERVATORY TRANSFORMATIONS - SEO AUTOMATION")
    print("="*60)
    
    workflow = AutomatedSEOWorkflow()
    
    # Run full analysis
    results = workflow.run_full_analysis(
        property_url=None,  # Will prompt for selection
        days=90,
        top_n_keywords=20
    )
    
    if results:
        print("\n✓ Analysis complete! Check the reports directory for results.")
