﻿import os
import requests
from datetime import datetime
import json
from flask import jsonify

def send_lead_to_slack(form_data, request_info):
    """Send lead directly to Slack - no database storage"""
    webhook_url = os.environ.get('SLACK_WEBHOOK_URL')

    if not webhook_url:
        # If no Slack configured, log to console (fallback)
        print(f"[LEAD CAPTURED] No Slack webhook configured")
        print(f"Email: {form_data.get('email')}")
        print(f"Data: {json.dumps(form_data, indent=2)}")
        return True  # Still return success

    # Determine lead type
    lead_type = " Beta Tester" if form_data.get('is_beta_tester') else " Waitlist"

    # Build comprehensive Slack message
    message = {
        "text": f"New {lead_type} Lead!",
        "blocks": [
            {
                "type": "header",
                "text": {
                    "type": "plain_text",
                    "text": f"New {lead_type} Registration",
                    "emoji": True
                }
            },
            {
                "type": "section",
                "fields": [
                    {
                        "type": "mrkdwn",
                        "text": f"*Email:*\n{form_data.get('email', 'N/A')}"
                    },
                    {
                        "type": "mrkdwn",
                        "text": f"*Interested In:*\n{' Beta Testing' if form_data.get('is_beta_tester') else ''}\n{' Launch Updates' if form_data.get('wants_updates') else ''}"
                    },
                    {
                        "type": "mrkdwn",
                        "text": f"*Company Size:*\n{form_data.get('company_size', 'N/A')}"
                    },
                    {
                        "type": "mrkdwn",
                        "text": f"*Construction Focus:*\n{form_data.get('construction_focus', 'N/A')}"
                    }
                ]
            },
            {
                "type": "section",
                "text": {
                    "type": "mrkdwn",
                    "text": f"*Biggest Challenge:*\n_{form_data.get('biggest_challenge', 'Not provided')}_"
                }
            },
            {
                "type": "divider"
            },
            {
                "type": "context",
                "elements": [
                    {
                        "type": "mrkdwn",
                        "text": f" IP: {request_info.get('ip', 'Unknown')} |  Referrer: {request_info.get('referrer', 'Direct')} |  {datetime.utcnow().strftime('%Y-%m-%d %H:%M UTC')}"
                    }
                ]
            }
        ]
    }

    try:
        response = requests.post(webhook_url, json=message)
        if response.status_code != 200:
            print(f"[ERROR] Slack webhook failed: {response.status_code}")
            print(f"[FALLBACK] Lead data: {form_data.get('email')}")
            return False
        print(f"[SUCCESS] Lead sent to Slack: {form_data.get('email')}")
        return True
    except Exception as e:
        print(f"[ERROR] Exception sending to Slack: {e}")
        print(f"[FALLBACK] Lead data: {form_data.get('email')}")
        return False

def send_bug_report_to_slack(bug_data, request_info):
    """Send enhanced bug report directly to Slack - no database storage"""
    webhook_url = os.environ.get('BUG_REPORT_WEBHOOK_URL')

    if not webhook_url:
        # If no Slack configured, log to console (fallback)
        print(f"[BUG REPORT] No Slack webhook configured")
        print(f"Bug Description: {bug_data.get('description')}")
        print(f"Severity: {bug_data.get('severity')}")
        print(f"Page/Feature: {bug_data.get('page_feature')}")
        print(f"Data: {json.dumps(bug_data, indent=2)}")
        return True  # Still return success

    # Priority indicators based on severity
    severity_indicators = {
        'high': '[HIGH] HIGH PRIORITY BUG',
        'medium': '[MEDIUM] MEDIUM PRIORITY BUG',
        'low': '[LOW] LOW PRIORITY BUG'
    }

    severity = bug_data.get('severity', 'medium')
    priority_text = severity_indicators.get(severity, '?? BUG REPORT')

    # Parse console errors if available
    console_errors_text = "None"
    try:
        if bug_data.get('console_errors'):
            console_errors = json.loads(bug_data.get('console_errors', '[]'))
            if console_errors:
                console_errors_text = f"{len(console_errors)} recent errors"
        else:
            console_errors_text = "None"
    except:
        console_errors_text = "Error parsing"

    # Build enhanced Slack message
    message = {
        "text": f"{priority_text}",
        "blocks": [
            {
                "type": "header",
                "text": {
                    "type": "plain_text",
                    "text": priority_text,
                    "emoji": True
                }
            },
            {
                "type": "section",
                "text": {
                    "type": "mrkdwn",
                    "text": f"*\"{bug_data.get('description', 'No description provided')}\"*"
                }
            },
            {
                "type": "section",
                "fields": [
                    {
                        "type": "mrkdwn",
                        "text": f"*Page/Feature:*\n{bug_data.get('page_feature', 'Unknown')}"
                    },
                    {
                        "type": "mrkdwn",
                        "text": f"*User:*\n{bug_data.get('email') if bug_data.get('email') else 'ID ' + str(bug_data.get('user_id', 'Anonymous'))}"
                    },
                    {
                        "type": "mrkdwn",
                        "text": f"*Device:*\n{bug_data.get('device_type', 'Unknown')} | {bug_data.get('screen_size', 'Unknown size')}"
                    },
                    {
                        "type": "mrkdwn",
                        "text": f"*Browser:*\n{bug_data.get('browser_info', request_info.get('user_agent', 'Unknown')[:50])}"
                    }
                ]
            },
            {
                "type": "section",
                "fields": [
                    {
                        "type": "mrkdwn",
                        "text": f"*Console Errors:*\n{console_errors_text}"
                    },
                    {
                        "type": "mrkdwn",
                        "text": f"*IP:*\n{request_info.get('ip', 'Unknown')}"
                    }
                ]
            },
            {
                "type": "divider"
            },
            {
                "type": "context",
                "elements": [
                    {
                        "type": "mrkdwn",
                        "text": f"? {datetime.utcnow().strftime('%I:%M %p UTC')} | ?? {bug_data.get('page_url', 'Unknown URL')[:100]}"
                    }
                ]
            }
        ]
    }

    try:
        response = requests.post(webhook_url, json=message)
        if response.status_code != 200:
            print(f"[ERROR] Slack webhook failed: {response.status_code}")
            print(f"[FALLBACK] Bug report data: {bug_data.get('description')[:100]}")
            return False
        print(f"[SUCCESS] Enhanced bug report sent to Slack: {severity.upper()} priority")
        return True
    except Exception as e:
        print(f"[ERROR] Exception sending bug report to Slack: {e}")
        print(f"[FALLBACK] Bug report data: {bug_data.get('description')[:100]}")
        return False

def send_lead_to_gsheets(form_data, request_info):
    """Send lead directly to Slack - no database storage"""
    gscript_url = os.environ.get('GSCRIPT_URL')
    gsheets_secret_key = os.environ.get('GSHEETS_AUTHKEY')

    if not gscript_url:
        # If no Slack configured, log to console (fallback)
        print(f"[LEAD CAPTURED] No Gsheets webhook configured")
        print(f"Email: {form_data.get('email')}")
        print(f"Data: {json.dumps(form_data, indent=2)}")
        return True  # Still return success

    # Determine lead type
    lead_type = " Beta Tester" if form_data.get('is_beta_tester') else " Waitlist"

    payload = {
        "auth": gsheets_secret_key,
        "email": form_data.get('email', 'N/A'),
        "is_beta_tester": form_data.get("is_beta_tester"),
        "wants_updates": form_data.get("wants_updates"),
        "company_size": form_data.get("company_size", "N/A"),
        "construction_focus": form_data.get("construction_focus", "N/A"),
        "biggest_challenge": form_data.get("biggest_challenge", "Not Provided"),
        "lead_type": lead_type
    }
    try:
        # Forward to Google Apps Script Web App
        response = requests.post(gscript_url, json=payload)
        result = response.json()
        
        if result.get("success"):
            return jsonify({"success": True, "message": "Thanks! Your submission has been recorded."}), 200
        else:
            return jsonify({"success": False, "message": result.get("message", "Error saving submission.")}), 400

    except Exception as e:
        print("Backend error:", str(e))
        return jsonify({"success": False, "message": "Server error. Please try again."}), 500