import os
import json
from supabase import create_client, Client
import boto3
import pandas as pd
from io import BytesIO
from datetime import datetime, timedelta
from email_service import email_service

# Initialize AWS SSM client
ssm = boto3.client('ssm')
def get_parameter(name):
    """Get a parameter from AWS SSM Parameter Store"""
    response = ssm.get_parameter(
        Name=name,
        WithDecryption=True
    )
    return response['Parameter']['Value']

def send_error_notification(error_message):
    """Send error notification email using email service"""
    try:
        email_service.send_notification(
            date=datetime.now().strftime('%Y-%m-%d'),
            status='error',
            error_message=f"Error in Store Issues Update\n\nError Message: {error_message}\n\nTime: {datetime.now().isoformat()}",
            client_email=False,
            process_name='Store Issues Update'
        )
        print(f"Error notification email sent")
    except Exception as e:
        print(f"Failed to send error notification email: {str(e)}")

def lambda_handler(event, context):
    try:
        # Initialize Supabase client 
        url: str = get_parameter('/supabase/url')
        key: str = get_parameter('/supabase/anon')
        
        supabase: Client = create_client(url, key)

        offset = 0
        limit = 10
        
        while True:
            try:
                store = supabase.rpc("get_store_data_pages", {
                    "page_offset": offset,
                    "limit_count": limit
                }).execute()
            
                print(f"Number of records stores read : {len(store.data)} + offset : {offset}")
                print(f"store read response : {store.data} ")
                
                if not store.data:
                    break

                # Convert the array of records to a JSON string
                store_records_json = json.dumps(store.data)
                
                # Get issue counts
                issues = supabase.rpc('get_issue_counts', {'in_values': json.loads(store_records_json)}).execute()
                print("Data:", issues.data)

                issues_records_json = json.dumps(issues.data)
                
                # Update store issues
                response = supabase.rpc('update_store_issues', {'issue_data': json.loads(issues_records_json)}).execute()
                
                # Update total counts
                update_response = supabase.rpc('update_total_counts', {'in_values': json.loads(store_records_json)}).execute()
                
                print("Data:", response.data)
                offset += limit
                
            except Exception as e:
                error_msg = f"Error processing store batch at offset {offset}: {str(e)}"
                print(error_msg)
                send_error_notification(error_msg)
                continue

        return {
            'statusCode': 200,
            'body': json.dumps({'message': 'success'})
        }
    except Exception as e:
        error_msg = f"Critical error in store issues update: {str(e)}"
        print(error_msg)
        send_error_notification(error_msg)
        return {
            'statusCode': 500,
            'body': json.dumps({'error': error_msg})
        }
