import gemini
import llama_groq
from prompts import *
#model = gemini.GeminiModel()
model=llama_groq.LlamaModel()

def review_code(code, c_prompt=None):
    if code is None or len(code) < 5 or code.isspace():
        raise InvalidCodeException("No code provided")

    if c_prompt is not None and len(c_prompt) > 30:
        prompt = custom_review_prompt(code.strip(), c_prompt.strip())
    else:
        #prompt = validation_prompt(code.strip())
        prompt = default_review_prompt1(code.strip())

    
    try:
        res = model.execute(prompt)
    except Exception as e:
        raise CodeReviewException(str(e))

    return res

def refine_code(code, c_prompt=None):
    if code is None or len(code) < 5 or code.isspace():
        raise InvalidCodeException("No code provided")

    if c_prompt is not None and len(c_prompt) > 30:
        prompt = custom_review_prompt(code.strip(), c_prompt.strip())
    else:
        #prompt = validation_prompt(code.strip())
        prompt = default_refine_prompt(code.strip())

    
    try:
        res = model.execute(prompt)
    except Exception as e:
        raise CodeReviewException(str(e))

    return res

def generate_documentation(code,c_prompt):
    
    if code is None or len(code) < 5 or code.isspace():
        raise InvalidCodeException("No code provided")

    if c_prompt is not None and len(c_prompt) > 30:
        prompt = custom_review_prompt(code.strip(), c_prompt.strip())
    else:
        prompt = default_doc_prompt(code.strip())

    
    try:
        res = model.execute(prompt)
    except Exception as e:
        raise CodeReviewException(str(e))

    return res

def resume_writer(code,c_prompt):
    
    if code is None or len(code) < 5 or code.isspace():
        raise InvalidCodeException("No code provided")

    if c_prompt is not None and len(c_prompt) > 30:
        prompt = custom_review_prompt(code.strip(), c_prompt.strip())
    else:
        prompt = resume_prompt(code.strip())

    
    try:
        res = model.execute(prompt)
    except Exception as e:
        raise CodeReviewException(str(e))

    return res
class InvalidCodeException(Exception):
    pass

class CodeReviewException(Exception):
    pass