### Create image upload route
### app/routes/plak_routes.py
import os
from flask import Blueprint, request, jsonify
from app.db import db
from app.models import Plak
from app.models import SelectedPlak
from werkzeug.utils import secure_filename
from app import db
from app.models import TreatmentPhoto
from datetime import datetime
from app.auth import token_required

plak_bp = Blueprint('plak', __name__)
treatment_bp = Blueprint('treatment', __name__)

UPLOAD_FOLDER_TREATMENT = 'app/static/treatment_photos'
UPLOAD_FOLDER_DOCTOR = 'app/static/uploads'
ALLOWED_EXTENSIONS  = {'png', 'jpg', 'jpeg', 'gif'}

def allowed_file(filename):
    return '.' in filename and \
           filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS

@plak_bp.route('/plaks/upload-image', methods=['POST'])
def upload_image():
    if 'image' not in request.files:
        return jsonify({"msg": "No image file in request"}), 400

    file = request.files['image']

    if file.filename == '':
        return jsonify({"msg": "No selected file"}), 400

    if file and allowed_file(file.filename):
        filename = secure_filename(file.filename)
        save_path = os.path.join(UPLOAD_FOLDER_DOCTOR, filename)
        file.save(save_path)
        image_url = f"http://localhost:5000/static/uploads/{filename}"
        return jsonify({"image_url": image_url}), 200

    return jsonify({"msg": "Invalid file type"}), 400

# Doctor creates plak
@plak_bp.route('/plaks', methods=['POST'])
def create_plak():
    data = request.get_json()
    plak = Plak(
        title=data['title'],
        description=data['description'],
        image_url=data.get('image_url'),
        created_by=data['doctor_id']  # Pass doctor ID
    )
    db.session.add(plak)
    db.session.commit()
    return jsonify({"msg": "Plak created"}), 201

# Get all plaks (for patients)
@plak_bp.route('/plaks', methods=['GET'])
def get_all_plaks():
    plaks = Plak.query.all()
    return jsonify([
        {
            "id": p.id,
            "title": p.title,
            "description": p.description,
            "image_url": p.image_url
        } for p in plaks
    ])

# Get all plaks (limit 10)
@plak_bp.route('/limited', methods=['GET'])
@token_required
def get_limited_plaks(current_user):
    try:
        # Get last 10 plaks
        plaks = Plak.query.order_by(Plak.created_at.desc()).limit(10).all()
        
        # Format the response
        plaks_list = []
        for plak in plaks:
            plaks_list.append({
                'id': plak.id,
                'title': plak.title,
                'description': plak.description,
                'image_url': plak.image_url,
                'status': plak.status,
                'created_at': plak.created_at.isoformat() if plak.created_at else None
            })

        return jsonify({
            'status': 'success',
            'data': plaks_list
        }), 200

    except Exception as e:
        return jsonify({
            'status': 'error',
            'message': str(e)
        }), 500

# Sliders
@plak_bp.route('/sliders', methods=['GET'])
@token_required
def get_plak_sliders(current_user):
    try:
        # Get plaks that are marked as sliders
        sliders = Plak.query.filter_by(is_slider=True).all()
        
        # Format the response
        sliders_list = []
        for slider in sliders:
            sliders_list.append({
                'id': slider.id,
                'title': slider.title,
                'image_url': slider.image_url,
                'status': slider.status,
                'order': slider.slider_order
            })

        # Sort sliders by order if needed
        sliders_list.sort(key=lambda x: x['order'] if x['order'] is not None else float('inf'))

        return jsonify({
            'status': 'success',
            'data': sliders_list
        }), 200

    except Exception as e:
        return jsonify({
            'status': 'error',
            'message': str(e)
        }), 500

# Patient selects plak
@plak_bp.route('/plaks/select', methods=['POST'])
def select_plak():
    data = request.get_json()
    selection = SelectedPlak(
        plak_id=data['plak_id'],
        patient_id=data['patient_id']
    )
    db.session.add(selection)
    db.session.commit()
    return jsonify({"msg": "Plak selected"}), 200

# Selected palks details
@plak_bp.route('/plaks/selected/<int:patient_id>', methods=['GET'])
def get_selected_plak(patient_id):
    selection = SelectedPlak.query.filter_by(patient_id=patient_id).first()

    if not selection:
        return jsonify({"msg": "No plak selected"}), 404

    plak = selection.plak
    return jsonify({
        "id": plak.id,
        "title": plak.title,
        "description": plak.description,
        "image_url": plak.image_url,
        "created_by": plak.created_by,
        "created_at": plak.created_at.strftime("%Y-%m-%d %H:%M:%S")
    }), 200

# Upload treatment Photo
@treatment_bp.route('/treatment/upload', methods=['POST'])
def upload_treatment_photo():
    if 'photo' not in request.files:
        return jsonify({"msg": "No photo uploaded"}), 400

    file = request.files['photo']
    if file.filename == '' or not allowed_file(file.filename):
        return jsonify({"msg": "Invalid or missing photo"}), 400

    data = request.form

    filename = secure_filename(file.filename)
    save_path = os.path.join(UPLOAD_FOLDER_TREATMENT, filename)
    file.save(save_path)

    photo = TreatmentPhoto(
        doctor_id=data.get('doctor_id'),
        patient_id=data.get('patient_id'),
        plak_id=data.get('plak_id'),
        title=data.get('title'),
        note=data.get('note'),
        photo_date=datetime.utcnow(),
        photo_path=f"/static/treatment_photos/{filename}"
    )

    db.session.add(photo)
    db.session.commit()

    return jsonify({"msg": "Treatment photo uploaded successfully"}), 201

# Get All Treatment Photos by Patient
@plak_bp.route('/treatment/photos/patient/<int:patient_id>', methods=['GET'])
def get_photos_by_patient(patient_id):
    photos = TreatmentPhoto.query.filter_by(patient_id=patient_id).order_by(TreatmentPhoto.photo_date.desc()).all()

    result = []
    for photo in photos:
        result.append({
            "id": photo.id,
            "title": photo.title,
            "note": photo.note,
            "photo_date": photo.photo_date.strftime("%Y-%m-%d %H:%M:%S"),
            "photo_path": photo.photo_path
        })

    return jsonify(result), 200
# Get All Treatment Photos by Dcoctor
@plak_bp.route('/treatment/photos/doctor/<int:doctor_id>', methods=['GET'])
def get_photos_by_doctor(doctor_id):
    photos = TreatmentPhoto.query.filter_by(doctor_id=doctor_id).order_by(TreatmentPhoto.photo_date.desc()).all()

    result = []
    for photo in photos:
        result.append({
            "id": photo.id,
            "title": photo.title,
            "note": photo.note,
            "photo_date": photo.photo_date.strftime("%Y-%m-%d %H:%M:%S"),
            "photo_path": photo.photo_path,
            "patient_id": photo.patient_id,
            "plak_id": photo.plak_id
        })

    return jsonify(result), 200




