import gradio as gr

# Import tensorflow here
import tensorflow as tf 

from tensorflow.keras.utils import img_to_array,load_img
from tensorflow.keras.models import load_model # Use tensorflow.keras.models
import numpy as np

# Load the pre-trained model from the local path
model_path = 'Mango.h5'

# Define custom objects to handle potential incompatibilities
custom_objects = {'DepthwiseConv2D': tf.keras.layers.DepthwiseConv2D} 

# Load the model with custom_objects
model = load_model(model_path, custom_objects=custom_objects)  # Load the model here

def predict_disease(image_file, model, all_labels):
    
    try:
        # Load and preprocess the image
        img = load_img(image_file, target_size=(224, 224))  # Use load_img from tensorflow.keras.utils
        img_array = img_to_array(img)
        img_array = np.expand_dims(img_array, axis=0)  # Add batch dimension
        img_array = img_array / 255.0  # Normalize the image

        # Predict the class
        predictions = model.predict(img_array)  # Use the loaded model here
        predicted_class = np.argmax(predictions[0])

        # Get the predicted class label
        predicted_label = all_labels[predicted_class]

        # Print the predicted label to the console
        
        if predicted_label=='Mango Anthracrose':
            predicted_label = """<style>
                      li{
                        font-size: 15px;
                        margin-left: 90px;
                        margin-top: 15px;
                        margin-bottom: 15px;
                      }
                      h4{
                        font-size: 17px;
                        margin-top: 15px;
                      }
                      h4:hover{
                        cursor: pointer;
                      }

                      h3:hover{
                        cursor: pointer;
                        color: blue;
                        transform: scale(1.3);
                      }
                      .note{
                        text-align: center;
                        font-size: 16px;
                      }
                      p{
                        font-size: 13px;
                        text-align: center;
                      }

                </style>
                <h3><center><b>Mango Anthracrose</b></center></h3>
                <h4>PESTICIDES TO BE USED:</h4>
                <ul>
                    <li>1. Mancozeb</li>
                    <li>2. Azoxystrobin</li>
                    <li>3. carbendazim</li>
                    <li>4. Propiconazole</li>
                    <li>5. Thiophanate-methyl</li>
                    <li>6. Copper Sulfate</li>
                </ul><br>
                <p class="note"><b>* * * IMPORTANT NOTE * * *</b></p>
                <p>Be sure to follow local regulations and guidelines for application</p>

            """
        elif predicted_label=='Mango Bacterial Canker':
            predicted_label = """
            <style>
                      li{
                        font-size: 15px;
                        margin-left: 90px;
                        margin-top: 15px;
                        margin-bottom: 15px;
                      }
                      h4{
                        font-size: 17px;
                        margin-top: 15px;
                      }
                      h4:hover{
                        cursor: pointer;
                      }

                      h3:hover{
                        cursor: pointer;
                        color: blue;
                        transform: scale(1.3);
                      }
                      .note{
                        text-align: center;
                        font-size: 16px;
                      }
                      p{
                        font-size: 13px;
                        text-align: center;
                      }

                </style>
                <h3><center><b>Mango Bacterial Canker</b></center></h3>
                <h4>PESTICIDES TO BE USED:</h4>
                <ul>
                    <li>1. Copper Hydroxide</li>
                    <li>2. Copper Oxychloride</li>
                    <li>3. Streptomycin</li>
                    <li>4. oxytetracycline</li>
                    <li>5. Neem oil</li>
                    <li>6. Garlic oil</li>
                </ul>
                <p class="note"><b>* * * IMPORTANT NOTE * * *</b></p>
                <p>Be sure to follow local regulations and guidelines for application</p>


            """
        elif predicted_label=='Mango Cutting Weevil':
            predicted_label = """
            <style>
                      li{
                        font-size: 15px;
                        margin-left: 90px;
                        margin-top: 15px;
                        margin-bottom: 15px;
                      }
                      h4{
                        font-size: 17px;
                        margin-top: 15px;
                      }
                      h4:hover{
                        cursor: pointer;
                      }

                      h3:hover{
                        cursor: pointer;
                        color: blue;
                        transform: scale(1.3);
                      }
                      .note{
                        text-align: center;
                        font-size: 16px;
                      }
                      p{
                        font-size: 13px;
                        text-align: center;
                      }

                </style>
                <h3><center><b>Mango Cutting Weevil</b></center></h3>
                <h4>PESTICIDES TO BE USED:</h4>
                <ul>
                    <li>1. Imidacloprid</li>
                    <li>2. Thiamethoxam</li>
                    <li>3. Chlorpyrifos</li>
                    <li>4. Lambda-cyhalothrin</li>
                    <li>5. Fipronil</li>
                    <li>6. Neem oil</li>
                </ul>
                <p class="note"><b>* * * IMPORTANT NOTE * * *</b></p>
                <p>Be sure to follow local regulations and guidelines for application</p>


            """

        elif predicted_label=='Mango Die Back':
            predicted_label = """
            <style>
                      li{
                        font-size: 15px;
                        margin-left: 90px;
                        margin-top: 15px;
                        margin-bottom: 15px;
                      }
                      h4{
                        font-size: 17px;
                        margin-top: 15px;
                      }
                      h4:hover{
                        cursor: pointer;
                      }

                      h3:hover{
                        cursor: pointer;
                        color: blue;
                        transform: scale(1.3);
                      }
                      .note{
                        text-align: center;
                        font-size: 16px;
                      }
                      p{
                        font-size: 13px;
                        text-align: center;
                      }

                </style>
                <h3><center><b>Mango Die Back</b></center></h3>
                <h4>PESTICIDES TO BE USED:</h4>
                <ul>
                    <li>1. Carbendazim</li>
                    <li>2. Mancozeb</li>
                    <li>3. Azoxystrobin</li>
                    <li>4. Triazole</li>
                    <li>5. Potassium bicarbonate</li>
                    <li>6. Sodium bicarbonate</li>
                </ul>
                <p class="note"><b>* * * IMPORTANT NOTE * * *</b></p>
                <p>Be sure to follow local regulations and guidelines for application</p>


            """
        elif predicted_label=='Mango Gall Midge':
            predicted_label = """
            <style>
                      li{
                        font-size: 15px;
                        margin-left: 90px;
                        margin-top: 15px;
                        margin-bottom: 15px;
                      }
                      h4{
                        font-size: 17px;
                        margin-top: 15px;
                      }
                      h4:hover{
                        cursor: pointer;
                      }

                      h3:hover{
                        cursor: pointer;
                        color: blue;
                        transform: scale(1.3);
                      }
                      .note{
                        text-align: center;
                        font-size: 16px;
                      }
                      p{
                        font-size: 13px;
                        text-align: center;
                      }

                </style>
                <h3><center><b>Mango Gall Midge</b></center></h3>
                <h4>PESTICIDES TO BE USED:</h4>
                <ul>
                    <li>1. Imidacloprid</li>
                    <li>2. Thiamethoxam</li>
                    <li>3. Chlorpyrifos</li>
                    <li>4. Lambda-cyhalothrin</li>
                    <li>5. Spinosad</li>
                    <li>6. Pyrethrin</li>
                </ul>
                <p class="note"><b>* * * IMPORTANT NOTE * * *</b></p>
                <p>Be sure to follow local regulations and guidelines for application</p>


            """
        elif predicted_label=='Mango Powdery Mildew':
            predicted_label = """
            <style>
                      li{
                        font-size: 15px;
                        margin-left: 90px;
                        margin-top: 15px;
                        margin-bottom: 15px;
                      }
                      h4{
                        font-size: 17px;
                        margin-top: 15px;
                      }
                      h4:hover{
                        cursor: pointer;
                      }

                      h3:hover{
                        cursor: pointer;
                        color: blue;
                        transform: scale(1.3);
                      }
                      .note{
                        text-align: center;
                        font-size: 16px;
                      }
                      p{
                        font-size: 13px;
                        text-align: center;
                      }

                </style>
                <h3><center><b>Mango Powdery Mildew</b></center></h3>
                <h4>PESTICIDES TO BE USED:</h4>
                <ul>
                    <li>1. Sulfur</li>
                    <li>2. Bicarbonates</li>
                    <li>3. Myclobutanil</li>
                    <li>4. Triadimefon</li>
                    <li>5. Propiconazole</li>
                    <li>6. Azoxystrobin</li>
                </ul>
                <p class="note"><b>* * * IMPORTANT NOTE * * *</b></p>
                <p>Be sure to follow local regulations and guidelines for application</p>


            """

        elif predicted_label=='Mango Sooty Mould':
            predicted_label = """
                <style>
                      li{
                        font-size: 15px;
                        margin-left: 90px;
                        margin-top: 15px;
                        margin-bottom: 15px;
                      }
                      h4{
                        font-size: 17px;
                        margin-top: 15px;
                      }
                      h4:hover{
                        cursor: pointer;
                      }

                      h3:hover{
                        cursor: pointer;
                        color: blue;
                        transform: scale(1.3);
                      }
                      .note{
                        text-align: center;
                        font-size: 16px;
                      }
                      p{
                        font-size: 13px;
                        text-align: center;
                      }

                </style>
                <h3><center><b>Mango Sooty Mould</b></center></h3>
                <h4>PESTICIDES TO BE USED:</h4>
                <ul>
                    <li>1. Imidacloprid (Neonicotinoid)</li>
                    <li>2. Thiamethoxam (Neonicotinoid)</li>
                    <li>3. Bifenthrin (Pyrethroid)</li>
                    <li>4. Lambda-cyhalothrin (Pyrethroid)</li>
                    <li>5. Insecticidal soap</li>
                    <li>6. Horticultural oil</li>
                </ul>
                <p class="note"><b>* * * IMPORTANT NOTE * * *</b></p>
                <p>Be sure to follow local regulations and guidelines for application</p>


            """
        else:
          predicted_label = """<h3 align="center">Mango Healthy</h3><br><br>
          <center>No need use Pesticides</center>"""

        return predicted_label


    except Exception as e:
        print(f"Error: {e}")
        return None

# List of class labels
all_labels = [
    'Mango Anthracrose',
    'Mango Bacterial Canker',
    'Mango Cutting Weevil',
    'Mango Die Back',
    'Mango Gall Midge',
    'Mango Healthy',
    'Mango Powdery Mildew',
    'Mango Sooty Mould'
]

# Define the Gradio interface
def gradio_predict(image_file):
    return predict_disease(image_file, model, all_labels)  # Pass the model to the function

# Create a Gradio interface
gr_interface = gr.Interface(
    fn=gradio_predict,  # Function to call for predictions
    inputs=gr.Image(type="filepath"),  # Upload image as file path
    outputs="html",  # Output will be the class label as text
    title="""<center>Mango Disease Predictor</center>""",
    description="Upload an image of a plant to predict the disease.",
)

# Launch the Gradio app
gr_interface.launch(share=True)