from fastapi import FastAPI, Request, HTTPException
from fastapi.templating import Jinja2Templates
from fastapi.staticfiles import StaticFiles
import json
import os

app = FastAPI()
app.mount("/static", StaticFiles(directory="static"), name="static")
templates = Jinja2Templates(directory="templates")

DATA_FILE = "dogs.json"

def load_dogs():
    if os.path.exists(DATA_FILE):
        f = open(DATA_FILE, "r")
        data = json.load(f)
        f.close()
        return data
    return []

def save_dogs(dogs):
    f = open(DATA_FILE, "w")
    json.dump(dogs, f)
    f.close()

dogs = load_dogs()

def get_next_id():
    if len(dogs) == 0:
        return 1
    return dogs[-1]["id"] + 1

@app.get("/")
def home(request: Request):
    return templates.TemplateResponse("index.html", {"request": request})

@app.get("/dogs")
def get_dogs():
    return dogs

@app.get("/dogs/search/{name}")
def find_dog(name: str):
    for dog in dogs:
        if dog["name"].lower() == name.lower():
            return dog
    raise HTTPException(status_code=404, detail="Sorry, unable to find " + name)

@app.post("/dogs")
async def add_dog(request: Request):
    dog = await request.json()
    dog["id"] = get_next_id()
    dogs.append(dog)
    save_dogs(dogs)
    return dog

@app.delete("/dogs/{dog_id}")
def delete_dog(dog_id: int):
    for dog in dogs:
        if dog["id"] == dog_id:
            dogs.remove(dog)
            save_dogs(dogs)
            return {"message": "Dog removed"}