
from flask import Blueprint, request, jsonify, send_from_directory
from flask_jwt_extended import jwt_required
from db.db import get_db_connection
from config.auth import role_required  # ✅ imported properly now

supplier_bp = Blueprint('supplier', __name__)

#Supplier details
@supplier_bp.route('/add_supplier', methods=['POST'])
@jwt_required()
@role_required('admin','cashier')
def add_supplier():
    data = request.get_json()

    supplier_name = data.get('supplier_name')
    supplier_code = data.get('supplier_code')
    supplier_contact = data.get('supplier_contact')
    supplier_optional_contact = data.get('supplier_optional_contact') or None  # optional
    supplier_email = data.get('supplier_email')
    supplier_address = data.get('supplier_address')

    # Validate only required fields
    if not all([supplier_name, supplier_code, supplier_contact, supplier_email, supplier_address]):
        return jsonify({'error': 'All required fields must be filled'}), 400

    conn = get_db_connection()
    cursor = conn.cursor()

    try:
        cursor.execute("""
            INSERT INTO suppliers (
                supplier_name, supplier_code, supplier_contact,
                supplier_optional_contact, supplier_email, supplier_address
            ) VALUES (%s, %s, %s, %s, %s, %s)
        """, (
            supplier_name, supplier_code, supplier_contact,
            supplier_optional_contact, supplier_email, supplier_address
        ))
        conn.commit()
        return jsonify({'message': 'Supplier added successfully!'}), 201
    except Exception as e:
        conn.rollback()
        return jsonify({'error': str(e)}), 500
    finally:
        cursor.close()
        conn.close()

@supplier_bp.route('/get_suppliers', methods=['GET'])
@jwt_required()
@role_required('admin','cashier')
def get_suppliers():
    conn = get_db_connection()
    cursor = conn.cursor(dictionary=True)
    cursor.execute("SELECT id, supplier_name, supplier_code, supplier_contact, supplier_email FROM suppliers")
    rows = cursor.fetchall()
    cursor.close()
    conn.close()
    return jsonify(rows)

@supplier_bp.route('/delete_supplier/<int:id>', methods=['DELETE'])
@jwt_required()
@role_required('admin')
def delete_supplier(id):
    conn = get_db_connection()
    cursor = conn.cursor()

    try:
        cursor.execute("DELETE FROM suppliers WHERE id = %s", (id,))
        conn.commit()
        return jsonify({'message': 'Supplier deleted successfully!'})
    except Exception as e:
        conn.rollback()
        return jsonify({'error': str(e)}), 500
    finally:
        cursor.close()
        conn.close()


@supplier_bp.route('/get_supplier/<int:id>', methods=['GET'])
@jwt_required()
@role_required('admin','cashier')
def get_supplier(id):
    conn = get_db_connection()
    cursor = conn.cursor(dictionary=True)
    try:
        cursor.execute("SELECT * FROM suppliers WHERE id = %s", (id,))
        supplier = cursor.fetchone()
        if supplier:
            return jsonify(supplier)
        else:
            return jsonify({'error': 'Supplier not found'}), 404
    finally:
        cursor.close()
        conn.close()


@supplier_bp.route('/update_supplier/<int:id>', methods=['PUT'])
@jwt_required()
@role_required('admin','cashier')
def update_supplier(id):
    data = request.get_json()
    conn = get_db_connection()
    cursor = conn.cursor()
    try:
        cursor.execute("""
            UPDATE suppliers SET 
                supplier_name = %s, 
                supplier_code = %s, 
                supplier_contact = %s, 
                supplier_email = %s,
                supplier_address = %s
            WHERE id = %s
        """, (
            data['supplier_name'],
            data['supplier_code'],
            data['supplier_contact'],
            data['supplier_email'],
            data['supplier_address'],
            id
        ))
        conn.commit()
        return jsonify({'message': 'Supplier updated successfully!'})
    except Exception as e:
        conn.rollback()
        return jsonify({'error': str(e)}), 500
    finally:
        cursor.close()
        conn.close()
