# HuoltoERP — Asennusohje

Tämä ohje on tarkoitettu tavalliselle verkkopalvelimelle (webhotelli) jossa on
PHP 8.1+ ja MySQL/MariaDB. Esimerkkeinä cPanel ja Plesk, mutta sama toimii
millä tahansa palvelimella.

---

## Mitä tarvitset

- Webhotelli jossa **PHP 8.1 tai uudempi**
- **MySQL 5.7+ tai MariaDB 10.3+** -tietokanta
- Pääsy tiedostojen hallintaan (FTP, SSH tai cPanel File Manager)
- Pääsy phpMyAdminiin tai vastaavaan tietokantatyökaluun

Tarkista PHP-versio: useimmissa webhotelleissa on "PHP Version" / "MultiPHP Manager"
-asetus hallintapaneelissa. Valitse 8.1, 8.2 tai 8.3.

---

## Vaihe 1 — Pura tiedostot ja siirrä palvelimelle

Pura `huoltoerp.zip`. Saat kansion `huoltoerp/` jossa on:

```
huoltoerp/
├── huoltoerp_schema.sql   ← tietokanta
├── api/                   ← taustajärjestelmä (PHP)
└── frontend/              ← käyttöliittymä (selain)
```

Siirrä `api/`- ja `frontend/`-kansiot palvelimelle. Suositeltu rakenne:

```
public_html/
├── api/        ← kopioi tänne koko api-kansion sisältö
└── (frontend-tiedostot tähän, ks. vaihe 5)
```

---

## Vaihe 2 — Luo tietokanta

cPanelissa: **MySQL Databases** → luo uusi tietokanta ja käyttäjä.
Pleskissä: **Databases** → **Add Database**.

Kirjaa ylös nämä neljä asiaa:
- Tietokannan nimi (esim. `kayttaja_huoltoerp`)
- Käyttäjätunnus (esim. `kayttaja_huolto`)
- Salasana
- Palvelin (yleensä `localhost`)

Anna käyttäjälle **kaikki oikeudet** tietokantaan.

---

## Vaihe 3 — Tuo tietokantarakenne

Avaa **phpMyAdmin** → valitse juuri luomasi tietokanta → **Import / Tuo**.
Valitse tiedosto `huoltoerp_schema.sql` ja paina **Go / Suorita**.

Onnistuessa näet 20 taulua ja valmista testidataa (teknikot, varaosat,
tekstipohjat sekä admin-käyttäjä).

> Skeema on tehty webhotelli-yhteensopivaksi — ei vaadi erikoisoikeuksia
> eikä komentorivi-importia. phpMyAdmin riittää.

---

## Vaihe 4 — Aseta salasanat ja osoitteet (.env)

Mene `api/`-kansioon. Kopioi `.env.example` → `.env`.
(cPanel File Managerissa: valitse tiedosto → Copy → nimeä `.env`.)

Avaa `.env` muokattavaksi ja täytä:

```
APP_ENV=production
JWT_SECRET=satunnainen-vahintaan-32-merkin-merkkijono-tahan

DB_HOST=localhost
DB_NAME=kayttaja_huoltoerp
DB_USER=kayttaja_huolto
DB_PASS=tietokannan-salasana

CORS_ORIGIN=https://www.omasivusto.fi
```

**JWT_SECRET** — keksi pitkä satunnainen merkkijono (esim. näppäile 40 merkkiä
sekaisin, tai käytä salasanageneraattoria). Tämä suojaa kirjautumistunnukset.

**CORS_ORIGIN** — sivustosi osoite jossa frontend on. Jos sama domain kuin API,
laita sivustosi pääosoite.

Yritystiedot ja Twilio (SMS) voi täyttää myöhemmin — SMS toimii ilmankin
"demo-tilassa" (viestit kirjataan lokiin, ei lähetetä).

---

## Vaihe 5 — Osoita webpalvelin oikein

API:n täytyy näkyä osoitteessa `/api`. Tärkeää: **vain `api/public/` saa olla
julkinen** — muu osa `api/`-kansiosta on suojattava.

### Helpoin tapa (alihakemisto)

Sijoita näin:
```
public_html/
├── index.html         ← uudelleenohjaus kirjautumiseen
├── assets/            ← frontendin assets-kansio
├── pages/             ← frontendin pages-kansio
└── api/
    └── public/        ← API:n juuri (.htaccess hoitaa reitityksen)
```

Muokkaa `frontend/`-tiedostoissa API-osoite osoittamaan oikeaan paikkaan.
Jokaisen HTML-sivun alussa on:
```html
<script>window.APP_CONFIG = { apiBase: '/api' };</script>
```
Jos API on osoitteessa `https://omasivusto.fi/api/public`, muuta arvoksi
`/api/public`. Jos teit alidomainin (esim. `api.omasivusto.fi`), laita koko
osoite.

### Siistein tapa (alidomain API:lle)

Luo alidomain `api.omasivusto.fi` ja osoita sen juuri `api/public/`-kansioon.
Aseta silloin frontendin `apiBase: 'https://api.omasivusto.fi'` ja
`.env`:iin `CORS_ORIGIN=https://www.omasivusto.fi`.

---

## Vaihe 6 — Kirjaudu sisään

Avaa selaimessa frontendin osoite (esim. `https://omasivusto.fi/pages/auth/login.html`
tai juuri-`index.html` jos teit uudelleenohjauksen).

```
Käyttäjätunnus: admin
Salasana:       admin123
```

**Vaihda salasana heti.** Luo oma vahva salasana komennolla (paikallisesti tai
palvelimen SSH:ssa):

```bash
php -r "echo password_hash('OMA_UUSI_SALASANA', PASSWORD_BCRYPT, ['cost'=>12]);"
```

Kopioi tuloste ja päivitä phpMyAdminissa:
```sql
UPDATE users SET password_hash = 'liitä-tähän-uusi-hash' WHERE username = 'admin';
```

---

## Vianetsintä

**"Palvelinvirhe" tai valkoinen sivu kirjautuessa**
→ Tarkista `.env`: DB_NAME, DB_USER, DB_PASS oikein? Onko tietokanta tuotu?

**"Verkkovirhe — tarkista yhteys"**
→ API-osoite väärä. Tarkista `apiBase` frontendin HTML-sivuilla ja että
`/api`-osoite vastaa. Avaa selaimessa suoraan `https://.../api/auth/me` —
pitäisi palauttaa JSON (ei 404).

**Kirjautuminen ei toimi vaikka tunnukset oikein**
→ Varmista että PHP-versio on 8.1+. Tarkista että admin-rivi on tietokannassa:
`SELECT username FROM users;`

**CORS-virhe selaimen konsolissa**
→ `.env`:n CORS_ORIGIN ei vastaa frontendin osoitetta. Niiden on täsmättävä
tarkalleen (myös https vs http).

**"reittiä ei löydy" kaikkialla**
→ `.htaccess` ei toimi. Varmista että palvelimella on `mod_rewrite` päällä
(useimmissa webhotelleissa on oletuksena) ja että `AllowOverride All` on sallittu.

---

## Tietoturvamuistilista ennen tuotantokäyttöä

- [ ] Vaihda admin-salasana
- [ ] Aseta vahva JWT_SECRET .env:iin
- [ ] APP_ENV=production (piilottaa virheviestit)
- [ ] CORS_ORIGIN vain oma domain (ei *)
- [ ] HTTPS päällä (SSL-sertifikaatti)
- [ ] `.env`-tiedoston oikeudet: vain omistaja lukee (chmod 600)
- [ ] Varmista ettei `api/.env` näy selaimessa
      (kokeile avata `https://.../api/.env` — ei saa näkyä)

---

## Testaus käyttöönoton jälkeen

1. Kirjaudu sisään (admin / admin123)
2. Luo asiakas (Asiakkaat → + Uusi asiakas)
3. Luo työmääräin (+ Uusi työmääräin) — valitse asiakas, täytä laite
4. Avaa työmääräin → lisää kustannusrivi (varaosa) → vaihda tila "valmis"
5. Luo lasku työmääräimestä (Laskutus)
6. Tee POS-myynti (POS-kassa) — lisää tuote, valitse maksutapa, maksa
7. Tarkista raportit (Raportit → Myyntiraportti)

Jos kaikki nämä toimivat, järjestelmä on käyttövalmis.
