from flask import Flask,request,jsonify,make_response,send_from_directory
from db.auth import Createauthtable,Insertmob,Readauthtable,Updatemobtable
from db.profile import Createprofiletabs,Insertprofile,Updateprofile
from models import Profilemodel
from flask_cors import CORS
import dbconfigure
from flask_cors import cross_origin
import os
UPLOAD_FOLDER = "uploads"
os.makedirs(UPLOAD_FOLDER, exist_ok=True)

# init flask
app=Flask(__name__)
CORS(app=app)
# configure folder for image save
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
app.config['MAX_CONTENT_LENGTH'] = 2 * 1024 * 1024  # 2MB limit

ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg'}

def allowed_file(filename):
    return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
url="http://localhost:3000"
dbs="foodnest.db"
@app.route("/",methods=['GET'])
def hello():
    return "hello"
#  *********************mobile phone auth***************************

#     insert mobile phone
@app.route("/authen",methods=['POST'])
def mobileauthen():
    
    if request.method=="POST":
        mob=request.form['mobileno']
        res= Insertmob.Mobauthen().authentication(mob)
        match (res):
            case "inserted":return  jsonify({'success':200,"message":"Successfully created your acount"})
            case "database error":return  jsonify({'success':405,"message":"database error"})

        
    else:
        return jsonify({"success":406,"message":"Wrong request "})        
    
    # fetch refferal
    
@app.route("/referal",methods=['POST'])
def fetchreferal():
    
    if request.method=="POST":
        mob=request.form['mobileno']
        res= Readauthtable.ReadMobauthen().fetchreferal(mob)
        match (res['msg']):
            case "ref found":return  jsonify({'success':200,"message":"Successfully found your referal code","data":res['refno']})
            case "database error":return  jsonify({'success':405,"message":"database error"})
            case "no data":return  jsonify({'success':400,"message":"no data","data":res['refno']})

    else:
        return jsonify({"success":4006,"message":"Wrong request "})      
        # fetch mobile no .
@app.route("/fetchmobile",methods=['POST'])
def fetchmobileno():
    
    if request.method=="POST":
        ref=request.form['referal']
        res= Readauthtable.ReadMobauthen().fetchmobile(ref)
        match (res['msg']):
            case "mobileno found":return  jsonify({'success':200,"message":"Successfully found your mobile no"})
            case "database error":return  jsonify({'success':405,"message":"database error"})
            case "no data":return  jsonify({'success':400,"message":"no data"})

    else:
        return jsonify({"success":4006,"message":"Wrong request "})      
           
         
     # fetch mobile no .
@app.route("/updatesubs",methods=['POST'])
def updatesubsstatus():
    
    if request.method=="POST":
        mobs=request.form['mob']
        res= Updatemobtable.Updatemobiletab().updatesubscriberstatus(db=dbs,mob=mobs)
        match (res):
            case "updated":return  jsonify({'success':200,"message":"Successfully updated status"})
            case "database error":return  jsonify({'success':405,"message":"database error"})
            case "not updated":return  jsonify({'success':400,"message":"no updated"})


    else:
        return jsonify({"success":406,"message":"Wrong request "})            
                  
# **************profile*************

# init profile
@app.route("/initprofile",methods=['POST'])
def createprofile():
    
    if request.method=="POST":
        mobs=request.form['mob']
        usercode=request.form['userid']
        res= Insertprofile.Insertuser().userprofile(mob=mobs,userid=usercode,db=dbs)
        match (res):
            case "inserted":return  jsonify({'success':200,"message":"Successfully created profile"})
            case "database error":return  jsonify({'success':405,"message":"database error"})
            


    else:
        return jsonify({"success":406,"message":"Wrong request "})            
                  


# update profile
@app.route("/updateprofile",methods=['POST'])
def updprofile():
    
    if request.method=="POST":
       
        usercode=request.form['userid']
        username=request.form['name']
        occ=request.form['occupation']
        currstud=request.form['currentstudy']
        chowk=request.form['chowk']
        gen=request.form['gender']
        lod=request.form['lodge']
        adharno=request.form['adhar']
        wall=request.form['wallet']
        coi=request.form['coin']
        pin=request.form['pincode']
        
        model=  Profilemodel.Usermodel(name=username,occupation=occ,currentstudy=currstud,nearchowk=chowk,gender=gen,lodgename=lod,pincode=pin,aadhar_cardno=adharno,wallet=wall,coin=coi)
        user=[]
        
        res= Updateprofile.Updateuser.updateuserdetails(db=dbs,userid=usercode,)
        match (res):
            case "updated":return  jsonify({'success':200,"message":"Successfully updated profile"})
            case "updated":return  jsonify({'success':400,"message":"unsuccessto updated profile"})
            case "database error":return  jsonify({'success':405,"message":"database error"})
            


    else:
        return jsonify({"success":406,"message":"Wrong request "})            
                  
from flask import request, jsonify
from werkzeug.utils import secure_filename
import os
import uuid

@app.route("/uploadprofile", methods=["POST"])
def upload_profile():
    try:
        file = request.files['image']
        userid = request.form['userid']

        if file.filename == "":
            return jsonify({"error": "No file selected"})

        # ✅ DB connection
        conn = dbconfigure.db(dbs)
        cur = conn.cursor()

        # 🔥 STEP 1: old image fetch karo
        cur.execute("SELECT profileimage FROM Users_profile WHERE user_id=%s", (userid,))
        old = cur.fetchone()

        # 🔥 STEP 2: old image delete karo
        if old and old[0]:
            old_path = old[0]
            if os.path.exists(old_path):
                os.remove(old_path)

        # 🔥 STEP 3: new image save karo
        filename = str(uuid.uuid4()) + "_" + secure_filename(file.filename)
        filepath = os.path.join("uploads", filename)

        file.save(filepath)

        # 🔥 STEP 4: DB update karo
        cur.execute(
            "UPDATE Users_profile SET profileimage=%s WHERE user_id=%s",
            (filepath, userid)
        )
        conn.commit()

        return jsonify({
            "success": 200,
            "image_url": f"/uploads/{filename}"
        })

    except Exception as e:
        print(e)
        return jsonify({"error": "Upload failed"})

    finally:
        cur.close()
        conn.close()
        
@cross_origin(origin=url)
@app.route('/uploads/<filename>')
def get_image(filename):
    return send_from_directory(app.config['UPLOAD_FOLDER'], filename)
if __name__=="__main__":
    Createauthtable.Mobile_basedregtable()
    Createprofiletabs.FoodProfiletable()
    app.run(debug=True)
    
    
    
    