import json
import boto3
import zipfile
import os
from io import BytesIO

def lambda_handler(event, context):
    # TODO implement
    s3_resource = boto3.resource('s3')
    bucket = os.environ['BUCKET']
    aws_access_key = os.environ['AWS_ACCESS_KEY_ID_2']
    aws_secret_key = os.environ['AWS_SECRET_ACCESS_KEY_2']
    source_key = event['Records'][0]['s3']['object']['key']
    recipient_email = os.environ['RECIPIENT_EMAIL']
    sender_email = os.environ['SENDER_EMAIL']
    folder_processed = "processed/"
    try:
        zip_obj = s3_resource.Object(bucket_name=bucket, key=source_key)
        buffer = BytesIO(zip_obj.get()["Body"].read())

        z = zipfile.ZipFile(buffer)
        for filename in z.namelist():
            file_info = z.getinfo(filename)
            file_name = os.path.basename(filename)
            if filename.lower().endswith(('.jpg', '.jpeg')):
                s3_resource.meta.client.upload_fileobj(
                    z.open(filename),
                    Bucket=bucket,
                    Key=f'{folder_processed}{file_name}'
        )
         return {
        'statusCode': 200,
        'body': json.dumps('Successfully Extracted the Files and Processed them.')
        }
    except Exception as e:
        print(f"Error processing file {source_key}: {e}")
        
        # Send error email
        ses.send_email(
            Source=sender_email,
            Destination={'ToAddresses': [recipient_email]},
            Message={
                'Subject': {'Data': 'Lambda Function Error Extract_CertiLock_Upload_Production'},
                'Body': {
                    'Text': {
                        'Data': f"Error processing file {source_key}: {str(e)}"
                    }
                }
            }
        )
        return {
            'statusCode': 500,
            'body': f"Error processing file {source_key}."
        }