import sqlite3
import argparse
import json

DB_NAME = 'form_filler.db'
conn = sqlite3.connect(DB_NAME)

def add_website(address):
    try:
        conn.execute("INSERT INTO websites (address) VALUES (?)", (address,))
        conn.commit()
        print(f"Dodano stronę {address}")
    except sqlite3.IntegrityError:
        print(f"Strona już istnieje w bazie!")

def list_websites():
    rows = conn.execute("SELECT id, address, active FROM websites").fetchall()
    for row in rows:
        print(f"[{row[0]}] {row[1]} - {'WŁĄCZONA' if row[2] else 'WYŁĄCZONA'}")

def set_active_status(address, status):
    conn.execute("UPDATE websites SET active = ? WHERE address = ?", (1 if status else 0, address))
    conn.commit()
    print(f"Ustawiono testowanie formularza w witrynie {address}")

def add_data_json(website_address, form_fields_str):
    try:
        form_fields = json.loads(form_fields_str)
    except json.JSONDecodeError:
        print("Nieprawidłowy JSON!")
        return

    conn.execute("INSERT INTO data (website_address, form_fields) VALUES (?, ?)",
                 (website_address, json.dumps(form_fields)))
    conn.commit()

    print(f"Dodano dane formularza dla {website_address}")

def list_data(website_address=None):
    if website_address:
        rows = conn.execute("SELECT id, website_address, form_fields FROM data WHERE website_address = ?", (website_address,)).fetchall()
    else:
        rows = conn.execute("SELECT id, website_address, form_fields FROM data").fetchall()

    for row in rows:
        print(f"[{row[0]}] Strona: {row[1]}")
        print(json.dumps(json.loads(row[2]), indent=2))
        print("---")

def remove_form_data(address):
    cur = conn.execute("DELETE FROM data WHERE website_address = ?", (address,))
    conn.commit()
    if cur.rowcount:
        print(f"Usunięto dane formularza o adresie {address}")
    else:
        print(f"Nie znaleziono danych formularza o adresie {address}")

def cli():
    parser = argparse.ArgumentParser()
    parser.add_argument("--add", help="Dodaj nową witrynę")
    parser.add_argument("--active", nargs=2, metavar=("address", "0|1"), help="Włącz/wyłącz testowanie formularza na witrynie")
    parser.add_argument("--list", action="store_true", help="Pokaż listę witryn")
    parser.add_argument("--add-form-data", nargs=2, metavar=("address", "json_data"), help="Dodaj dane formularza (JSON!)")
    parser.add_argument("--remove-form-data", help="Usuń dane formularza o podanym adresie")
    parser.add_argument("--list-form-data", nargs="?", const="", metavar="address", help="Wypisz dane formularza dla wszystkich stron")

    args = parser.parse_args()

    if args.add:
        add_website(args.add)
    elif args.active:
        set_active_status(args.active[0], bool(int(args.active[1])))
    elif args.list:
        list_websites()
    elif args.add_form_data:
        add_data_json(args.add_form_data[0], args.add_form_data[1])
    elif args.remove_form_data:
        remove_form_data(args.remove_form_data)
    elif args.list_form_data is not None:
        list_data(args.list_form_data if args.list_form_data else None)

if __name__ == "__main__":
    cli()