<?php
/**
 * Doğa Sigorta API Bridge
 * - action=token    : OAuth token alır (adaauth.dogasigorta.com)
 * - action=hesapla  : Sağlık primi hesaplar (portal.dogasigorta.com)
 * - action=dask     : DASK yenileme teklifi (portal.dogasigorta.com SOAP)
 *
 * Kullanım:
 *   POST doga.php?action=token
 *     Body (form): username=...&password=...
 *
 *   POST doga.php?action=hesapla[&host=portal|saglik]
 *     Header: X-Bearer-Token: <access_token>
 *     Body (JSON): Hesapla payload
 *
 *   POST doga.php?action=dask
 *     Body (JSON): {"tc":"...","dogumTarihi":"GG.AA.YYYY","policeNo":"..."}
 */

header('Content-Type: application/json; charset=utf-8');

$action = $_GET['action'] ?? '';

if ($action === 'token') {
    $username = $_POST['username'] ?? '';
    $password = $_POST['password'] ?? '';

    if ($username === '' || $password === '') {
        http_response_code(400);
        echo json_encode(['error' => 'username ve password zorunludur']);
        exit;
    }

    $fields = [
        'grant_type' => 'public_get_username_password',
        'client_id'  => 'WS-Doga',
        'username'   => $username,
        'password'   => $password,
        'scope'      => 'openid profile',
    ];

    $ch = curl_init('https://adaauth.dogasigorta.com/connect/token');
    curl_setopt_array($ch, [
        CURLOPT_POST           => true,
        CURLOPT_POSTFIELDS     => http_build_query($fields),
        CURLOPT_HTTPHEADER     => ['Content-Type: application/x-www-form-urlencoded'],
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_TIMEOUT        => 30,
    ]);
    $resp = curl_exec($ch);
    $http = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $err  = curl_error($ch);
    curl_close($ch);

    if ($resp === false) {
        http_response_code(502);
        echo json_encode(['error' => 'curl_error', 'detail' => $err]);
        exit;
    }

    http_response_code($http);
    echo $resp;
    exit;
}

if ($action === 'hesapla') {
    $token = $_SERVER['HTTP_X_BEARER_TOKEN'] ?? '';
    $body  = file_get_contents('php://input');

    if ($token === '' || $body === '') {
        http_response_code(400);
        echo json_encode(['error' => 'X-Bearer-Token header ve JSON body zorunludur']);
        exit;
    }

    $host = $_GET['host'] ?? 'portal';
    $host = preg_replace('/[^a-z]/', '', strtolower($host));
    $url  = "https://{$host}.dogasigorta.com/saglik/public/hesapla";

    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_POST           => true,
        CURLOPT_POSTFIELDS     => $body,
        CURLOPT_HTTPHEADER     => [
            'Content-Type: application/json',
            'Authorization: Bearer ' . $token,
        ],
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_TIMEOUT        => 60,
    ]);
    $resp = curl_exec($ch);
    $http = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $err  = curl_error($ch);
    curl_close($ch);

    if ($resp === false) {
        http_response_code(502);
        echo json_encode(['error' => 'curl_error', 'detail' => $err, 'url' => $url]);
        exit;
    }

    http_response_code($http);
    echo $resp;
    exit;
}

if ($action === 'dask') {
    $body = file_get_contents('php://input');
    $p    = json_decode($body, true);

    $tc          = trim($p['tc']          ?? '');
    $dogumTarihi = trim($p['dogumTarihi'] ?? '');
    $policeNo    = trim($p['policeNo']    ?? '');

    if ($tc === '' || $dogumTarihi === '' || $policeNo === '') {
        http_response_code(400);
        echo json_encode(['error' => 'tc, dogumTarihi ve policeNo zorunludur']);
        exit;
    }

    $xml = '<?xml version="1.0" encoding="utf-8"?>'
         . '<soap:Envelope'
         . ' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'
         . ' xmlns:xsd="http://www.w3.org/2001/XMLSchema"'
         . ' xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">'
         . '<soap:Body>'
         . '<TekUrunHesaplaDisSistem xmlns="http://tempuri.org/">'
         . '<cevaplar>'
         . '<SoruCevap><Soru>UrunKodu</Soru><Cevap>199</Cevap></SoruCevap>'
         . '<SoruCevap><Soru>UrunGrubu</Soru><Cevap>dask</Cevap></SoruCevap>'
         . '<SoruCevap><Soru>AcenteNo</Soru><Cevap>503016</Cevap></SoruCevap>'
         . '<SoruCevap><Soru>KullaniciAdi</Soru><Cevap>ws_northern</Cevap></SoruCevap>'
         . '<SoruCevap><Soru>Parola</Soru><Cevap>WsNorth0526!</Cevap></SoruCevap>'
         . '<SoruCevap><Soru>MusteriTcKimlikNo</Soru><Cevap>' . htmlspecialchars($tc, ENT_XML1) . '</Cevap></SoruCevap>'
         . '<SoruCevap><Soru>MusteriDogumTarihi</Soru><Cevap>' . htmlspecialchars($dogumTarihi, ENT_XML1) . '</Cevap></SoruCevap>'
         . '<SoruCevap><Soru>DaskOncekiPoliceNo</Soru><Cevap>' . htmlspecialchars($policeNo, ENT_XML1) . '</Cevap></SoruCevap>'
         . '<SoruCevap><Soru>DaskOncekiTecditNo</Soru><Cevap>0</Cevap></SoruCevap>'
         . '<SoruCevap><Soru>DaskOncekiZeyilNo</Soru><Cevap>0</Cevap></SoruCevap>'
         . '</cevaplar>'
         . '</TekUrunHesaplaDisSistem>'
         . '</soap:Body>'
         . '</soap:Envelope>';

    $soapUrl = 'https://portal.dogasigorta.com/WebServisleri/AcentePoliceServisleri.asmx';

    $ch = curl_init($soapUrl);
    curl_setopt_array($ch, [
        CURLOPT_POST           => true,
        CURLOPT_POSTFIELDS     => $xml,
        CURLOPT_HTTPHEADER     => [
            'Content-Type: text/xml; charset=utf-8',
            'Content-Length: ' . strlen($xml),
            'SOAPAction: "http://tempuri.org/TekUrunHesaplaDisSistem"',
        ],
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_TIMEOUT        => 30,
    ]);
    $resp = curl_exec($ch);
    $http = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $err  = curl_error($ch);
    curl_close($ch);

    if ($resp === false) {
        http_response_code(502);
        echo json_encode(['error' => 'curl_error', 'detail' => $err]);
        exit;
    }

    $prim = null;
    $sonucKodu = null;
    $sonucAciklamasi = null;

    if (preg_match('/<HesaplananBrutPrim[^>]*>([\d.,]+)<\/HesaplananBrutPrim>/i', $resp, $m)) {
        $prim = $m[1];
    } elseif (preg_match('/<HesaplananPrim[^>]*>([\d.,]+)<\/HesaplananPrim>/i', $resp, $m)) {
        $prim = $m[1];
    } elseif (preg_match('/<BrutPrim[^>]*>([\d.,]+)<\/BrutPrim>/i', $resp, $m)) {
        $prim = $m[1];
    }

    if (preg_match('/<SonucKodu[^>]*>(\d+)<\/SonucKodu>/i', $resp, $m)) {
        $sonucKodu = $m[1];
    }
    if (preg_match('/<SonucAciklamasi[^>]*>([^<]+)<\/SonucAciklamasi>/i', $resp, $m)) {
        $sonucAciklamasi = $m[1];
    }

    echo json_encode([
        'sonucKodu'       => $sonucKodu,
        'sonucAciklamasi' => $sonucAciklamasi,
        'prim'            => $prim,
        'rawXml'          => $resp,
    ]);
    exit;
}

http_response_code(404);
echo json_encode([
    'error'   => 'Unknown action',
    'actions' => ['token', 'hesapla', 'dask'],
]);
