#!/usr/local/bin/perl

#$Id: book-page-rebuild.pl,v 1.8 2025/08/14 18:28:50 mwlucas Exp $
#reads the book info spreadsheet and builds a static page with
#purchase info

use warnings;
use v5.10;
use open qw/:std :utf8/;
use Spreadsheet::Read;
use strict;
my $book_data = ReadData ("/home/mwlucas/book-link-pages.xlsx") or die "Cannot read spreadsheet";
my $DEBUG=0;
my $DEBUG2=0;


#constants
#amazon affiliate codes
my $amazonUs = "michaelwlucas-20";
my $amazonAu = "michaelwlucas-22";
my $amazonUk = "michaelwlucas-21";
my $amazonCa = "michaelwluc08-20";
my $amazonDe = "michaelwluc09-21";
my $amazonFr = "michaelwluc01-21";
my $amazonIt = "Michaelwluc05-21";
my $amazonEs = "michaelwluc0f-21";

my $imageDir = "/images/";
my $baseUrl = "https://mwl.link";
my $pageDir = "/var/www/link/";

# Fetching all file content
my @books = Spreadsheet::Read::rows($book_data->[1]);
#skip the first row, it's headers
foreach my $i (2 .. scalar @books) 
{

    write_page ($books[$i-1][0],$books[$i-1][1],$books[$i-1][2],$books[$i-1][3],
		$books[$i-1][4],$books[$i-1][5],$books[$i-1][6],$books[$i-1][7],
		$books[$i-1][8],$books[$i-1][9],$books[$i-1][10],$books[$i-1][11],
		$books[$i-1][12],$books[$i-1][13]);
}


sub write_page {
    my $title = $_[0];
    my $author = $_[1];
    my $mwlio = $_[2];
    my $tagLine = $_[3];
    my $twp = $_[4];
    my $bookshop = $_[5];
    my $kobo = $_[6];
    my $gumroad = $_[7];
    my $apple = $_[8];
    my $nook = $_[9];
    my $google = $_[10];
    my $asin = $_[11];
    my $jacket  = $_[12];
    my $nsp = $_[13];

    
    if ($DEBUG) {
	say "title:    " . $title;
	say "author:   " . $author;
	say "mwlio:    " . $mwlio;
	say "tagLine:  " . $tagLine;
	say "twp:      " . $twp;
	say "bookshop: " . $bookshop;
	say "kobo:     " . $kobo;
	say "gumroad:  " . $gumroad;
	say "apple:    " . $apple;
	say "nook:     " . $nook;
	say "google:   " . $google;
	say "asin:     " . $asin;
	say "jacket:   " . $jacket;
    }

    say "Now writing page for $title";
    #transform the data to usable form

#normalize the title for other names
    my $cleanTitle=$title;
    $cleanTitle=~s#,##g;
    $cleanTitle=~s#[^\w]#-#g;
    $cleanTitle=lc($cleanTitle);
    $cleanTitle=~s#^--##;
    $cleanTitle=~s#--#-#;

    my $promoImage = $imageDir . $cleanTitle . "-promo.png";
    my $bookCover = $imageDir . $cleanTitle . "-cover.jpg";
    my $promoLink = $baseUrl . $promoImage;
    my $bookFile = $pageDir . $cleanTitle . ".html";


    if ($DEBUG2) {
	say "cleanTitle: " . $cleanTitle;
	say "promoImage: " . $promoImage;
	say "bookCover:  " . $bookCover;
	say "promoLink:  " . $promoLink;
	say "bookFile:   " . $bookFile;
	say " ";
    }

    #now write a page

    open (PAGE, '>', $bookFile) or die $!;

    print PAGE <<"HEADER";
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>$title</title>
    <link rel="icon" type="image/png" href="/images/open-book.png">
    <meta name="description" content="$title purchase links page.">

<style>
      body{max-width:650px;margin:40px auto;padding:0 10px;font:18px/1.5 -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,"Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; color:#444}h1,h2,h3{line-height:1.2}\@media (prefers-color-scheme: dark){body{color:#c9d1d9;background:#0d1117}a:link{color:#58a6ff}a:visited{color:#8e96f0}}
    </style>
  </head>

<meta property="og:image" content="$promoLink" />

<meta property="og:image:width" content="1200" />

<meta property="og:image:height" content="630" />

<h1>$title</h1>

<p>$tagLine <p><br>

<img src="$bookCover" width=200 height=300>

<p><a href="$mwlio">Return to Genre/Topic Page</a>
<p><a href="https://mwl.io/">Return to Main Page</a>
<p><a href="https://mwl.io/book-index/">Title Index</a>

<p>$jacket

<p>Buy <i>$title</i> at:</p>
<ul>
HEADER

    #only print entries if the variable exists

    if ($twp) {
	say PAGE "<li><a href=\"$twp\">My bookstore (coupon code MWL gets you 10% off and print copies include the ebook free!)</a></li>";
    }

    if ($nsp) {
	say PAGE "<li><a href=\"$nsp\">Print/epub bundle direct from No Starch Press (coupon code ILUVMICHAEL gets you 30% off)</a></li>";
    }

    if ($bookshop) {
	say PAGE "<li><a href=\"$bookshop\">bookshop.org (support your local indie bookstore!)</a></li>";
    }

    if ($kobo) {
	say PAGE "<li><a href=\"$kobo\">Kobo</a></li>"
    }

    if ($gumroad) {
	say PAGE "<li><a href=\"$gumroad\">Gumroad</a></li>"
    }

    if ($apple) {
	say PAGE "<li><a href=\"$apple\">Apple Books</a></li>"
    }

    if ($nook) {
	say PAGE "<li><a href=\"$nook\">Barnes & Noble</a></li>"
    }

    if ($google) {
	say PAGE "<li><a href=\"$google\">Google Books</a></li>"
    }

    #now descend into Amazon
    if ($asin) {
	    print PAGE <<"AMAZON";

<li><a href=\"https://amazon.com/dp/$asin/ref=nosim?tag=$amazonUs\">Amazon US</a></li>
<ul>
<li><a href=\"https://amazon.com.au/dp/$asin/ref=nosim?tag=$amazonAu\">Amazon Australia</a></li>
<li><a href=\"https://amazon.co.uk/dp/$asin/ref=nosim?tag=$amazonUk\">Amazon UK</a></li>
<li><a href=\"https://amazon.ca/dp/$asin/ref=nosim?tag=$amazonUk\">Amazon Canada</a></li>
<li><a href=\"https://amazon.de/dp/$asin/ref=nosim?tag=$amazonDe\">Amazon Germany</a></li>
<li><a href=\"https://amazon.fr/dp/$asin/ref=nosim?tag=$amazonFr\">Amazon France</a></li>
<li><a href=\"https://amazon.it/dp/$asin/ref=nosim?tag=$amazonIt\">Amazon Italy</a></li>
<li><a href=\"https://amazon.es/dp/$asin/ref=nosim?tag=$amazonEs\">Amazon Spain</a></li>
</ul>

AMAZON
    }

    say PAGE "</ul>";

    say PAGE "<p><a href=\"$mwlio\">Go to Catalog</a><p><a href=\"https://mwl.io/book-index/\">Title Index</a>";

    
    #we're done, close up shop
    close PAGE;
}


